TCP 프로토콜이란?
전송 계층(4계층) 프로토콜 중 하나로 IP 위에서 특정 프로세스까지 패킷을 전달하기 위한 프로토콜이다.
특징
신뢰성
> 데이터의 오류나 누락 없이 안전한 전송을 보장한다
> 오류나 누락이 발생한다면 재전송을 수행해 보정한다
연결 지향성
> 논리적인 연결 통로를 통해 데이터를 주고받아 데이터의 전송 순서를 보장한다.
> 스트림 기반의 전송방식을 사용해 데이터를 임의의 크기로 나눠 연속해 전송하는 방식을 사용한다.
혼잡 제어
> 네트워크의 혼잡 정도에 따라 송신자가 데이터 전송량을 제어한다.
> 혼잡 정도에 대한 판단 기준은 데이터 손실 발생 유무로 판단한다. 만약 누락이 발생했다면 네트워크가 혼잡한 상태로 판단해 전송량을 조절한다.
흐름 제어
> 상대방이 받을 수 있을 만큼만 데이터를 효율적으로 전송한다.
> 흐름제어를 위해 슬라이딩 윈도우 방식을 사용한다.
* 슬라이딩 윈도우 : 상대방이 수신 가능한 크기내에서 데이터를 연속해 보내는 방식으로 매 세그먼트 전송 시마다 수신 확인 응답을 수신한 후 전송하면 시간당 데이터 전송량이 떨어지므로 연속으로 전송한다.
TCP 구조
Source Port (16 bits)
> 출발지(송신) 포트 번호
Destination Port (16 bits)
> 목적지(수신) 포트 번호
Sequence Number (32 bits)
> 송신 데이터 순서 번호
> 송신 시 전송하는 데이터의 시작 바이트 순번을 담는다
> 연결설정 단계에서 초기 순서 번호를 주고받아 초기 순서 번호는 0으로 고정이 아니라 임의의 수를 할당한다
Acknowledgement Number (32 bits)
> 상대방이 다음에 전송할 순서 번호
> 수신 확인 응답과 함께 해당 필드에 상대방이 다음에 전송할 순서 번호를 담아 보낸다
Header Length (4 bits)
> 헤더 길이
> 4 bits 워드 단위로 표시해 기본 헤더와 옵션 헤더 최대 40 bytes로 구성된다
Reserved (4 bits)
> 사용하지 않고 예약되어 있는 비트
Control (6 bits)
> URG (Urgent Pointer is valid) : 긴급 데이터 설정
> ACK (Acknowledgment is valid) : 수신 확인 응답(ACK) 설정
> PSH (Request for Push) : 송수신 버퍼에 있는 데이터를 즉시 처리
> RST (Reset the Connection) : 연결 중단 (강제 종료), 재설정을 요구한다
> SYN (Synchronize sequence numbers) : 연결 설정, 3-way-handshking을 하자 제의한다
> FIN (Terminate the Connection) : 연결 종료 (정상 종료)
Window Size (16 bits)
> 현재 상태 최대 버퍼
> 수신측에서 송신측으로 보내는 수신 버퍼의 여유공간 크기를 의미하며 이를 통해 흐름 제어를 수행할 수 있다
Checksum (16 bits)
> 헤더를 포함한 전체 세그먼트에 대한 오류 검사를 하는 필드
> 데이터의 무결성을 보장해준다
Urgent Pointer (16 bits)
> 긴급 처리해야 할 데이터가 존재하는 곳의 위치에 대한 포인터 값
3-way handshake
클라이언트와 서버가 신뢰성 있는 통신을 하기 위한 통신 시작 과정
1. client에서 연결을 하기 위해 server에 SYN 플래그와 함께 요청을 보낸다
(SYN_SENT 상태)
* SYN은 랜덤한 값
2. server에서 SYN 패킷을 잘 받았다는 의미로 ACK과 SYN을 새로 보낸다
(SYN_RECEIVED 상태)
* ACK은 상대방이 다음에 보낼 패킷의 순서 번호를 의미한다
3. client에서 server의 SYN을 잘 받았다는 의미로 ACK을 보낸다
(ESTABLISHED 상태)
* 연결 설정을 완료
4-way handshake
통신을 종료하는 과정
1. client가 통신을 종료하기 위해 FIN을 보낸다
(FIN_WAIT_1 상태)
2. server에서 알겠다는 의미로 ACK을 보내 애플리케이션의 소켓을 닫는다
(CLOSE_WAIT 상태)
* client는 FIN_WAIT_2 상태가 됨
3. 애플리케이션에서 소켓을 닫으면 server는 client로 FIN을 보낸다
(LAST_ACK 상태)
4. client는 FIN을 받고 server에 ACK을 보낸다 (TIME_WAIT)
* client는 일정 시간이 되면 CLOSED 상태가 된다
5. server가 ACK을 받는다 (CLOSED 상태)
'Study > Network' 카테고리의 다른 글
AWS (0) | 2020.11.26 |
---|---|
Google Cloud Platform 인스턴스 생성하기 (0) | 2020.11.09 |
[Network] ARP spoofing 개념 정리 (0) | 2020.09.20 |
[Network] ARP 프로토콜 개념과 실습 (0) | 2020.09.20 |
[Network] 네트워크 아키텍쳐의 종류 (0) | 2020.09.14 |
댓글