
데이터를 보내기 위해 사용하는 프로토콜 = UDP TCP
TCP (Transmission Control Protocol)
- 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
[특징]
- 연결형 서비스로 가상 회선 방식 제공
- 3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제
- 흐름, 혼잡 제어
- 높은 신뢰성
- UDP 보다 빠름
TCP 패킷 헤더에서 중요한 정보 = Sequence & Ack number (바이트 단위로 표시)
Sequence Number : 세그먼트(각 계층 패킷의 구분을 위해 4계층-세그먼트. 3계층 패킷, 2계층- 프레임으로 구분) 데이터의 순서번호를 표기. 3Way-Handshacking 수행 시 ISN의 기능도 함. 시스템의 클럭에서 추출된 값을 부여. Ack number와 함께 통신의 신뢰성을 보장
ACK number(Acknowledge Number) : 상대방으로부터 수신한 데이터의 바로 다음에 수신할 데이터 순서 번호를 나타낸다. Sequence Number의 확인 응답으로서 데이터 전송자에게 패킷을 잘 받았으니 그 다음 패킷을 송신하라는 의미로 사용된다. 상대방이 다음에 전송할 패킷의 Sequence Number이기도 함.
Flags
URG : Urgent Point 필드와 함께 사용되고 플래그 설정 시 TCP는 해당 세그먼트를 전송 큐의 제일 앞으로 보낸다.
ACK : SYN에 대한 확인의 의미. 3Way-Handshacking에서의 SYN과 reset을 제외하고 모든 세그먼트에 ACK가 설정
PSH : 일반적으로 모든 데이터를 전송하고 마지막에 보내는 신호로 수신측은 데이터를 즉시 전송하라는 의미.
RST : 송신자가 유효하지 않은 연결을 시도할 때 거부하는데 이용되고 또한 통신의 연결 및 종료를 정상적으로 할 수 없을 때 사용
SYN : 통신 시작 시 연결을 요청하고 ISN을 교환한다.
FIN : 데이터 전송을 종료한다.
TCP 3-way HandShaking
1. 클라이언트는 서버에 접속을 요청하는 SYN패킷을 보냄. 이때 클리아인터는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태
2. 서버는 SYN요청을 받고 클라이언트에게 요청을 수락하는 ACK와 SYN flag가 설정된 패킷을 발송 한 후, 클라이언트가 다시 ACK으로 응답하기를 기다림. 서버는 SYN_RECEIVED 상태
3. 클라이언트는 서버에서 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터의 송수신이 이루어지며, 이때의 클라이언트와 서버의 상태가 ESTABLISHED로 확장
MSS (Maximum Segment Size)
- TCP상에서 전송할 수 있는 사용자 데이터의 최대 크기
- MTU값에 의해 결정
- MSS = MTU - IP header size - TCp header size
TCP 4-way handshake
- 클라이언트가 연결을 종료하겠다는 FIN을 전송하고, ACK을 기다리는 FIN-WAIT-1 상태가 된다.
- 서버는 FIN수신 후, 일단 ACK을 보내고, 남아있는 통신 작업을 처리하는 CLOSE-WAIT 상태가 된다.
- 클라이언트는 서버로부터 ACK을 수신한 후, 서버의 FIN을 기다리는 FIN-WAIT-2 상태가 된다.
- 서버는 남아있던 작업을 모두 끝낸 후, 자신도 연결을 종료하겠다는 FIN을 보낸 후, LAST-ACK 상태가 된다.
- 클라이언트는 서버의 FIN을 받은 후, 일정 시간 대기하는 TIME-WAIT상태로 진입하며, 서버에게 ACK을 보낸가.
- 서버는 클라이언트의 ACK을 받은 후, 연결을 종료한다. (close)
세션 수립 과정
- Client에서 connect()를 호출하기 전, Server는 socket을 생성한 후, bind(), listen()이 수행되어야 하고, accept()에서 block된 상태이어야 한다.
- Client가 connect()를 호출하게 되면, 먼저 SYN 패킷을 서버에 전송한다.
- Server는 이를 수신한 후, Client에게 SYN, ACK 패킷을 전송한다.
- Client는 Server의 SYN, ACK 패킷을 받은 후, connect()함수의 return값을 받게 된다. ( Client는 서버와 연결되었다고 인식하고, ESTABLISHED상태가 된다.)
- Client는 Server에게 ACK패킷을 보낸다.
- Server는 이를 수신 후, accept() block에서 빠져나오며, 연결을 위한 새로운 연결 소켓을 생성하고, ESTABLISHED상태가 된다.
세션 종료 과정
- Client, Server 둘 중 한곳에서 먼저 세션 종료를 시작한다는 의미로 FIN패킷을 상대방에게 전송하고 FIN_WAIT_1 상태가 된다. (Client가 보냈다고 가정)
- 최초의 FIN패킷은 출력 스트림을 종료하는것으로 보낼 수 있다. (shotdown(SD_SEND), close())
- Server는 FIN패킷을 받은 후, CLOSE_WAIT상태가 되며 Client에게 ACK패킷을 전송한다.
- Client는 ACK패킷을 받은 후, FIN_WAIT_2 상태가 된다.
- Server는 출력 스트림에 남아있는 데이터를 모두 Client에게 보낸 후, FIN패킷을 Client에게 전송하며 이 때, LAST_ACK상태가 된다.
- 서버에서는 FIN패킷을 보내기 위해, 클라이언트와 연결이 끊어진것을 인지하고, 출력스트림을 닫아야 한다.
- 이를 하지 않으면 클라이언트는 fin_wait_2, 서버는 close_wait상태에서 대기 즉 유령 세션이 발생
- Client는 Server로부터 FIN패킷을 받은 후, 일정시간 대기하는 TIME_WAIT상태가 되며, Server에게 ACK패킷을 보낸다.
- Server는 ACK패킷을 받을 후, 소켓을 종료하고 CLOSED 상태가 된다.
Tcp Service
HTTP 80
HTTPS 443
imap(네이버 구글메일) 143
pop3 101
SMTP 25
telnet 23
SSH 22
fto 20 , 21
UDP (User Datagram Protocol)
빠른 속도로 데이터를 전달할 수 있습니다. 패킷에 순서나 번호를 부여해 재조립하거나, 흐름제어 혹은 혼잡 제어 같은 작업들도 처리하지 않기에 엄청나게 빠른 속도로 데이터를 전송할 수 있고, 비연결형 서비스로써 1:1 통신뿐만 아니라 1:N, N:N 통신에서도 쉽게 사용할 수 있습니다. 그렇기에 UDP는 WebRTC를 이용한 실시간 스트리밍을 통해 음성이나 동영상 데이터를 전송하는 등 정보의 신뢰성보다는 실시간성과 연속성, 속도 등이 더 중요한 경우에 널리 사용되고 있습니다
정리
비연결형 서비스를 지원하는 전송계층 프로토콜로써, 인터넷상에서 서로 정보를 주고받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를 거치지 않고,보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜입니다.
특징
1. 비연결형 서비스로 데이터그램 방식을 제공한다.
2. 정보를 주고 받을때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
3. 신뢰성 없는 데이터를 전송한다.
4. 데이터의 경계를 구분한다.
5. TCP보다 전송속도가 빠르다.
L4 -> 전송방식(신속) , header가 간단하다.
src / dst port : 상위 udp 서비스를 연결
UDP를 사용하는 서비스는 ?
=> 인방, voice 전화 data, 동영상 data,
DNS(이름해석) 53,
DHCP (IP자동할당), 67, 68
TFTP(파일 전송) 69
NTP(시간동기화), 123
Syslog(리눅스 로그), 514
SNMP(네트워크장비정보) 161, 162
RDP(remote desktop protocol) 3389
'정리 > 네트워크' 카테고리의 다른 글
DHCP, 사설IP, IPv6, 서브넷팅 (0) | 2022.04.12 |
---|---|
Unicast, Broadcast, Multicast, IP주소체계, 클래스 (0) | 2022.04.11 |
OSI 7계층, 계층별 정리, 캡슐화, 역캡슐화 (0) | 2022.04.11 |