TCP
TCP/IP 네트워크는 애플리케이션 계층에게 두가지 구별되는 트랜스 포트 계층 프로토콜 제공
- TCP : 네트워크 애플리케이션을 설계 할 때 두가지 트랜스포트 프로토콜 중 하나를 명시해야 함
- Stream-Oriented Transport Protocol
- 상위 계층(IP 프로토콜)에서 payload된 데이터를 단편화
Connection Oriented Protocol (연결 지향 프로토콜)
- 가상회선 : 물리적으로 전용 회선이 연결되어 있는것 처럼 가상의 연결 통로를 설정해서 통신하는 방식으로 가상의 연결 통로
- 순서제어 : 논리적인 연결 통로를 통해 데이터를 주고 받음으로써 데이터 전송 순서 보장
- 스트림 기반의 전송 방식 사용 : 임의의 크기로 나누어 연속해서 전송하는 방식
Reliable Protocol (산뢰할 수 있는 프로토콜)
- 흐름제어 수행 (Flow Control)
: 흐름제어란 상대방이 받을 수 있을 만큼만 데이터를 효율적으로 젆송하는 것
- 오류제어 수행 (Error Control)
: 데이터의 오류나 누락 없이 안전한 전송을 보장해 주는 것 (체크섬 수신측에서 검증)
- 혼잡제어 수행 (Congestion Control)
: 혼잡 제어란 네트워크 혼잡 정도에 따라 송신자가 데이터 전송량을 제어
TCP 구조
- Source port : 패킷을 송신하는 시스템의 포트번호를 나타냄. 클라이언트의 경우 예약된 0-1023의 well-known 포트 번호를 제외한 번호를 임의로 생성하고 서버의 경우 일반적인 서비스 제공시 well-known 한 포트를 사용한다
- Destination Port: 패킷을 수신할 시스템 포트 번호
- Sequence Number : 세그먼트 (각 계층 패킷의 구분을 위해 4계층(세그먼트), 3계층 (패킷), 2계층 (프레임)으로 구분
- Acknowledge Number: 상대방으로부터 수신한 데이터의 바로 다음에 수신할 데이터 순서번호를 나타냄. Sequence Number의 확인 응답으로 부터 데이터 전송자에게 패킷을 받았으니 그 다음 패킷을 송신하는 의미로 사용. 상대방이 다음에 전송할 패킷의 Sequence Number이기도 함
- Header Length : TCP 헤더의 전체 길이를 byte 단위로 표시
- Reserved : 미래를 위해 예약된 필드로 항상 0으로 설정
- Flags CWR: 송신자가 자신의 윈도우 사이즈를 줄인다 ( 혼잡 감지시 수신자가 ECE를 설정하여 송신자에게 알림
- URG : Urgent Point 필드와 함께 사용되고 플래그 설정시 TCP 는 해당 세그먼트를 전송 큐의 제일 앞으로 보냄
- ACK : SYN에 대한 확인의 의미 3 way handshacking에서의 SYN과 reset을 제외하고 모든 세그먼트에 ACK가 설정됨
- PSH: 일반적으로 모든 데이터를 전송하고 마지막에 보내는 신호로 수신측은 데이터를 즉시 전송하라는 의미
- RST : 송신자가 유효하지 않은 연결을 시도할 때 거부하는데 이용되고 또한 통신의 연결 및 종료를 정상적으로 할 수 없을 때 이용된다
- SYN: 통신 시작시 연결을 요청하고 ISN 을 교환한다
- FIN: 연결 종료
- Window size: 송신 시스템에서 자신이 수용하는 한 버퍼의 크기를 byte 단위로 나타냄 통신하는 동안 송수신자는 해당 필드를 통해 수신 사이즈를 계속 변경
- Checksum : 데이터가 전송 중에 손실되지 않고 원본과 동일한지 검사
- Urgent Point: Urgent flag 설정시 urgent 데이터의 마지막 byte 의 일련 번호를 urgent point 필드에 저장. 해당 부분까지 긴급하게 처리를 요함
TCP 연결 설정
3-way handshaking
- TCP/IP 프로토콜을 이용해서 통신하는 응용프로그램은 데이터를 주고받기 전에 먼저 연결을 진행함
- TCP는 양방향 통신이기에 클라이언트-클라이언트 형태가 존재
- 연결을 먼저 요청하는 Host -> Client
- 연결을 먼저 요청받는 Host -> Server
1) Client > Server : TCP, SYN
2) Server > Client : TCP, SYN, ACK
3) Client > Server : TCP, ACK
< 3 way-handshake에서 사용되는 TCP 헤더필드 >
Sequence Number
-
Segment에 있는 첫번째 바이트 스트림 번호
-
TCP 연결, 종료시에는 Sequence Number을 임의의 랜덤값으로 설정 (SN이 노출시에 공격자가 위조패킷을 보낼 수 있기 때문에
Control bits
-
ACK
- 패킷을 받았다는 응답
- 최초 연결의 첫 번째 세그먼트를 제외한 모든 Segment의 ACK 비트는 1로 설정
-
SYN
- 연결을 요청할 때 SYN bit을 1로 설정 ( SYN bit = 1 이면 TCP 연결을 요청하는 과정인 것을 알 수 있음 )
- 다른 모든 경우에는 SYN bit를 0으로 설정
4-way handshaking
세션을 종료하기 위해 수행되는 절차
1) Client(FIN_WAIT) > Server : FIN flag 전송
2) Server(CLOSE_WAIT) > Client : ACK 전송
3) Server(LAST_ACK) > Client : 연결이 종료되었다는 FIN flag 전송
3) Client(TIME_WAIT) > Server(CLOSE) : 종료메시지 확인 ACK 전송
IP
- MTU ( Maximum Transfer Unit )
: 네트워크 기기가 전송 할 수 있는 최대 전송 단위
- 단편화 ( Fragmentation )
-
MTU가 큰 네트워크에서 MTU가 작은 네트워크로 데이터그램이 전송 될 경우 데이터그램은 나누어서 보내져야 함
-
데이터그램의 재조립은 최종 목적지 호스트에 의해서만 수행
-
재조립으로 인해 발생하는 비효율성 때문에 전송 중 재조립 안됨
-
단편화 관련 필드 : Identification
, Flag
, Fragmentation offset
- MSS (Maximum Segment Size )
- TCP 상에서 전송할 수 있는 사용자데이터 최대 크기
MSS = MTU - IP Header 크기 -TCP Header 크기