✔️ TCP와 UDP
TCP란?
- Transmission Control Protocol, 전송 제어 프로토콜
- 네트워크 통신에서 신뢰적인 연결방식을 보장할 수 있도록 하는 프로토콜
- 데이터를 패킷 단위로 처리
- 데이터의 분실, 중복, 순서가 뒤바뀜 등을 자동으로 보정해줘서 송수신 데이터의 정확한 전달을 할 수 있도록 함
- 3-way handshake라는 과정을 통해 연결을 설정하고 통신을 시작한 후,
4-way handshake 과정을 통해 연결을 해제하는 가상 회선 방식을 사용
TCP의 헤더 분석
- TCP의 헤더는 Source Port, Destination Port, Sequence Number, Acknoledgment Number,
Header length (Data Offset), Resv, Flag Bit, Window Size, TCP Checksum, Urgent Pointer, Options로 구성됨- Source Port : 시작 포트 (TCP로 연결되는 가상 회선 양단의 송수신 프로세스에 할당된 포트 주소)
- Destination Port : 도착지 포트 (TCP로 연결되는 가상 회선 양단의 송수신 프로세스에 할당된 포트 주소)
- Sequence Number : 송신자가 지정하는 순서 번호이며 전송되는 바이트 수를 기준으로 증가함
- Acknoledgment Number : 수신 프로세스가 제대로 수신한 바이트의 수
- Header length (Data Offset) : TCP 헤더 길이를 4바이트 단위로 표시
- Resv : 나중을 위해 0으로 채워진 예약 필드
- Flag Bit : SYN, ACK, FIN 등 제어 번호
- Window Size : 수신 윈도우의 버퍼 크기로 상대방의 확인 없이 전송 가능한 최대 바이트 수
- TCP Checksum : 헤더와 데이터의 에러 확인 용도
- Urgent Pointer : 현재 순서 번호부터 표시된 바이트까지 긴급한 데이터임을 표시
- Options : 추가 옵션이 있을 경우 표시
3-way-handshake
- TCP의 정확한 전송 보장을 위해 통신하기에 앞서, 논리적인 접속을 성립하기 위해 이 과정을 진행
- 클라이언트가 서버에게 SYN(Synchronize Sequence Number) 패킷을 보냄
- 서버가 SYN을 받고, 클라이언트로 받았다는 신호인 ACK(Acknowledgement Number)와 SYN 패킷을 보냄
- 클라이언트는 서버의 응답인 ACK와 SYN 패킷을 받고, ACK를 서버로 보냄
- 이렇게 3번의 통신이 완료되면 클라이언트와 서버가 서로 자신의 존재를 알릴 수 있어 연결이 성립됨
- 포트(PORT) 상태 정보
- CLOSED : 포트가 닫힌 상태
- LISTEN : 포트가 열린 상태로 연결 요청 대기 중
- SYN_RCV : SYNC 요청을 받고 상대방의 응답을 기다리는 중
- ESTABLISHED : 포트 연결 상태
4-way-handshake
- 연결 성립 후, 모든 통신이 끝났다면 해제를 위해 이 과정을 진행
- 클라이언트가 서버에게 연결을 종료한다는 FIN(Finish) 플래그를 보냄
- 서버는 FIN을 받고, 클라이언트로 확인했다는 ACK를 보냄
(이때 서버는 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 됨) - 데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보냄
- 클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보냄
(클라이언트는 아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다림) - 서버는 ACK를 받은 이후 소켓을 닫고, TIME_WAIT 시간이 끝나면 클라이언트도 닫게 됨
- 이렇게 4번의 통신이 완료되면 연결이 해제됨
UDP란?
- User Datagram Protocol, 사용자 데이터 프로토콜
- 네트워크 통신에서 비연결형, 신뢰성 없는 전송 프로토콜
- 데이터를 데이터그램 단위로 처리
- 사전에 설정이 필요하지 않으며 그 후에 해제도 필요하지 않음
- IP가 제공하는 정도의 수준만을 제공하는 간단한 IP 상위 계층의 프로토콜로
확인 응답 제공, 흐름제어, 오류제어, 재전송 등을 못하므로 에러가 날 수도 있고, 재전송이나 순서가 바뀔 수 있음 - 하지만 오버헤드가 적어 TCP보다 용량이 가볍고 데이터의 처리가 빠르기 때문에 주로 실시간 방송과 온라인 게임에서 사용
- 모든 응용 계층 프로토콜을 TCP, UDP 중 하나의 전송 계층 프로토콜을 사용해야 하는데
이때 DNS request와 같이 UDP 세그먼트에 들어갈 정도로 작거나 연결을 유지할 필요가 없을 경우에 UDP를 사용
하지만 DNS 중 Zone transfer을 사용하는 경우, 데이터가 크거나 응답을 못 받은 경우에는 TCP를 사용
UDP의 헤더 분석
- UDP의 헤더는 Source Port, Destination Port, Length, Checksum으로 간단하게 구성됨
- Source Port : 시작 포트 (송수신 애플리케이션의 포트 번호)
- Destination Port : 도착지 포트 (송수신 애플리케이션의 포트 번호)
- Length : 헤더와 데이터를 포함한 전체 길이
- Checksum : 헤어와 데이터의 에러 확인을 위한 최소한의 오류 검출
'Tech Interview > Network' 카테고리의 다른 글
[Network] 쿠키와 세션 (0) | 2024.01.17 |
---|---|
[Network] CORS (0) | 2024.01.17 |
[Network] HTTP와 HTTPS (0) | 2024.01.16 |
[Network] TCP와 IP (0) | 2024.01.15 |
[Network] OSI 7계층 (0) | 2024.01.15 |