TCP(Transmission Control Protocol)
- 네트워크 상에서 데이터를 메세지의 형태(세그먼트라는 블록 단위)로 보내기 위해 IP와 함께 사용하는 프로토콜
- TCP/IP 와 함께 사용하는데,
IP는 데이터의 배달을 처리한다면, TCP는 패킷을 추적 및 관리
- 연결형 서비스로 가상 회선 방식을 제공
- 3-way handshaking, 4-way handshaking 방식으로 제공
- 흐름제어 및 혼잡제어를 제공
- 흐름제어
- 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버 플로우를 방지하는 것
- 송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막음
- 혼잡제어
- 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지
- 정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막음
- 높은 신뢰성을 보장
- UDP보다는 속도가 느림
- 전이중(Full-Duplex), 점대점(Point-to-Point)방식
- 전이중
- 전송이 양방향으로 동시에 일어날 수 있다.
e.g. 전화
- 점대점
- 각 연결이 정확히 2개의 종담점을 가지고 있다
- 멀티캐스팅이나 브로드캐스팅은 지원하지 않음
- 연속성보다 신뢰성있는 전송이 중요할 때 사용
TCP 헤더
- Source/Destination Port : 출발지/목적지 포트번호
- Sequence Number : 전달되는 바이트에 대한 Sequence Number로 1씩 증가
- Acknowledgement : 수신측에서 수신하고자 하는 바이트의 번호
- Checksum : 데이터를 포함한 세그먼트 전체의 오류를 검사하기 위한 필드
- Urgent Pointer : 긴급 데이터를 우선적으로 처리할 것을 수신측에게 알리기 위한 목적으로 사용하는 필드
- Flag : 플래그 필드
- Control bit : 플래그 비트, 6bit, URG-ACK-PSH-RST-SYN-FIN 의미를 가짐
3-way handshake
- TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(connection Establish)하는 과정
- 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 함
- 즉, TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정
3-way handshake 과정
- A → B : SYN
- 접속 요청 프로세스 A가 연결 요청 메세지 전송(SYN)
- 송신자가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다
- PORT 상태
- A : CLOSED
- B : LISTEN
- B → A : SYN + ACK
- 접속 요청을 받은 프로세스 B가 요청을 수락했으면, 접속 요청 프로세스인 A도 포트를 열어 달라는 메세지를 전송( SYN + ACK )
- 수신자는 Acknowledgement Number 필드를 Sequence Number + 1 로 지정하고, SYN와 ACK 플래그 비트를 1로 설정한 세그먼트를 전송
- PORT 상태
- A : CLOSED
- B : SYN_RCV
- A → B : ACK
- PORT 상태
- A : ESTABLISHED
- B : SYN_RCV
- 마지막으로 접속 요청 프로세스 A가 수락 확인을 보내, 연결을 맺음(ACK)
- 이때, 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다
- PORT 상태
- A : ESTABLISHED
- B : ESTABLISHED
4-way handshake
- TCP의 연결 해제(Connection Termination)하는 과정
- A 프로세스(Client)가 B 프로세스(Server)에 연결 해제를 요청하는 과정
4-way handshake 과정
- A → B : FIN
- 프로세스 A가 연결을 종료하겠다는 FIN 플래그를 전송
- 프로세스 B가 FIN 플래그로 응답하기 전까지 연결을 계속 유지
- B → A : ACK
- 프로세스 B는 일단 확인 메세지를 보내고 자신의 통신이 끝날 때까지 기다린다
(이 상태가 TIME_WAIT 상태)
- 수신자는 Acknowledgement Number 필드를 Sequence Number + 1로 지정하고, ACK 플래그 비트를 1로 설정한 세그먼트를 전송
- 자신이 전송할 데이터가 남아있다면 이어서 계속 전송
- B → A : FIN
- 프로세스 B가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 프로세스 A에게 FIN 플래그를 전송
- A → B : ACK
- 프로세스 A는 확인했다는 메세지를 전송
UDP(User Datagram Protocol)
- 데이터를 데이터그램 단위로 처리하는 프로토콜
- 비연결형 서비스로 데이터그램 방식을 제공
- 연결을 위해 할당되는 논리적인 경로가 없다
- 각각의 패킷은 다른 경로로 전송되고, 각각의 패킷은 독립적인 관계를 지니게 된다
- 데이터를 서로 다른 경로로 독립적으로 처리
- 정보를 주고 받을 때, 정보를 보내거나 받는다는 신호절차를 거치지 않음
- UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
- 신뢰성이 낮음
- TCP보다 속도가 빠름
- 신뢰성보다는 연속성이 중요한 서비스 e.g. 실시간 서비스(streaming)에 사용
UDP헤더
- Source/Destination Port : 출발지/목적지 포트번호
- Length : 헤더와 데이터를 합한 사용자 데이터그램의 전체 길이(0~65,535)
- Checksum : 데이터그램의 헤더와 데이터 전체의 오류 검사를 위해 사용
참고
포트(PORT) 상태 정보
- CLOSED: 포트가 닫힌 상태
- LISTEN: 포트가 열린 상태로 연결 요청 대기 중
- SYN_RCV: SYNC 요청을 받고 상대방의 응답을 기다리는 중
- ESTABLISHED: 포트 연결 상태
플래그 정보
- URG : 긴급 포인터가 있다는 것을 나타냄
- 0 : 일반
- 1 : 긴급
- ACK : 확인 응답번호가 기술되어 있음
- 0 : ACK 없음
- 1 : ACK
- PSH : 데이터를 주고 받을 때 사용
- RST : 연결을 재설정 할때 사용
- SYN : 연결을 초기화 하기 위해 순서번호를 동기화
- FIN : 송신측이 데이터를 전송을 종료
정리