TCP 세그먼트 TCP 헤더
- 세그먼트: 전송 계층에서의 PDU(프로토콜 데이터 단위)
- TCP 세그먼트: 응용 계층의 데이터에서 TCP 헤더를 붙여 캡슐화한 것 / 네트워크 계층에서 받은 패킷에서 IP헤더를 떼어내는 역캡슐화를 거친 것 -> 캡슐화 시 TCP 헤더 부착, 역캡슐화 시 TCP 헤더 제거
- 전송계층에서의 핵심이 되는 TCP(Transmission Control Protocol)은 신뢰성과 정확성이 특징!
* TCP 헤더의 구조 (TCP 세그먼트의 핵심)
- TCP 헤더는 목적지까지 데이터를 신뢰성 있게 전송하기 위해 필요한 정보를 가지고 있다.
- 출발지 포트 번호나 목적지 포트 번호는 직관적으로 이름에서 알 수 있듯이, 각각 출발지(혹은 목적지) 응용 프로세스의 포트 번호 / 포트 번호라는 것을 유의!
- 일련 번호(= 순서 번호 = sequence number)는 송신지가 지정하는 순서 번호
- 확인 응답 번호는 데이터를 정상적으로 수신했을 시 보내는 번호 / 받은 데이터에 Sequence Number에 1을 더해 해당 데이터를 정확히 받았음을 알린다.
- 헤더의 길이는 옵션 필드가 가변적인 이유 때문에 정확하게 헤더의 길이를 파악하기 위해 사용
- 예약 영역은 나중에 사용하기 위해 남겨둔 예비 필드
- Flag라 불리는 코드 비트는 총 6개의 비트(URG, ACK, PSH, RST, SYN, FIN)로 구성 / 각 비트가 활성화 되면서 데이터 전송에 사용된다.
- 윈도우 크기는 TCP 흐름 제어를 위해 사용되는 필드 / 한 번에 전송할 수 있는 데이터의 양을 의미하는 값
- 체크섬은 오류 검출 용도 / TCP 헤더와 데이터에 대해 체크섬 방식으로 계산한 결과값을 '체크섬' 필드에 저장 / 가상 헤더를 추가로 포함
- 긴급 포인터는 코드 비트 필드의 URG 비트 설정과 함께 사용 / 긴급 데이터 처리
3-way handshake, 4-way handshake
* 3-way handshake
- 세선 연결 확립- 패킷 요청을 세 번 교환하는 과정
1) SYN
- 통신을 하기 위해서 A가 B에서 통신을 하기 위한 '연결' 확립을 해달라고 요청(SYN)- 이때 SYN 비트가 활성화 되어 1로 바꾸니 세그먼트를 전송
2) SYN + ACK
- B는 A가 보낸 요청을 받은 후에 응답하겠다고 응답을 회신하기 위해 연결 확립에 대한 응답(ACK)를 보낸다.- 동시에 B도 A에게 데이터 전송에 대한 허가를 받기 위해 연결을 확립해달라고 요청(SYN)- 이때 ACK 비트와 SYN 비트가 1로 활성이 된 세그먼트를 전송
3) ACK
- B의 요청을 받은 A도 연결 확립에 대한 응답(ACK)를 보낸다.- ACK 비트가 1로 활성화된 세그먼트를 전송
* 4-way handshake
- 세션 연결 종료- 패킷 요청을 네 번 교환하여 마무리하는 과정
1) FIN
- A는 B에게 연결 종료(FIN) 요청- FIN이 1로 활성화된 세그먼트를 전송
2) ACK
- B는 A에게 연결 종료에 대한 응답(ACK)를 반환- ACK가 1로 활성화된 세그먼트를 전송
3) FIN
- B도 A에게 연결 종료 요청(FIN)을 보낸다. - FIN이 1로 활성화된 세그먼트를 전송
4) ACK
- A도 B에게 연결 종료에 대한 응답(ACK)을 반환- ACK가 1로 활성화된 세그먼트를 전송
- 두 과정에서 TCP 헤더의 플래그(코드 비트)가 중요한 역할!- 초깃값은 0인 코드 비튿르이 각 과정에서 활성화되면서 1로 바뀌어서 전송이 된다.
TCP 에러제어
* TCP 에러제어
- 세그먼트의 손실 및 훼손, 순서가 어긋난 경우, 중복된 경우 이에 대한 제어나 처리하는 방법 중 하나
- 먼저 에러를 검출하는 과정을 거치며, 그 방법으로 CRC나 체크섬 사용
- 신뢰성 있는 데이터 전송
* 에러 정정 (ARQ)
1) Stop-and-wait
- Timeout 시 ack를 받지 못한 패킷부터 기다렸다가 재전송
- 식별을 위해서 0과 1의 패킷(혹은 ack)을 번갈아 전송
- 단점: 확인 응답이 올 때까지 기다리는 방식이기 때문에 비효율적!
2) Go-Back-N
- Timeout 시 ack를 받지 못한 패킷부터 '모두' 다시 전송
- 어느 한 패킷이 돌아오지 않아 에러 발생 시 그 번호의 패킷부터 다시 재전송
- 한마디로 뒤로 돌아가서 다시 재전송하는 방식
3) Selective Repeat
- ack를 받지 못한 패킷을 선택적 재전송
- 패킷이 도착하지 않아 타임아웃되었을 시 선택적으로 재전송하고, 버퍼에 저장하는 방법을 이용하는 방식
TCP 흐름제어
- TCP 흐름제어: 송수진의 데이터 처리 능력이 달라 데이터가 유실되는 것을 방지하는 기법
- Stop-and-Wait 기법은 비효율적이라는 단점이 있어서 주로 슬라이딩 윈도우 기법 사용
- 슬라이딩 윈도우 기법: 각 송수신지에 있는 슬라이딩 윈도우를 활용하는 방식 / 계속해서 자신의 윈도우 크기를 상대에게 알려주는 '윈도우 광고 기법' 사용
- Rwnd(Receiver Window): 수신 측 윈도우
- Cwnd(Congestion Window): 송신 측 윈도우
- 송신지 윈도우 크기는 수신지 윈도우 크기에 맞춰서 상대방이 받을 수 있도록 크기를 맞춘다.
-> 윈도우 크기를 조절하기도 하고 윈도우 크기를 알리기도 하는 기법을 통해서 TCP는 흐름제어의 동작을 한다!
TCP 혼잡제어
- 혼잡(Congestion) 상황: 데이터의 수가 과도하게 증가하거나 데이터가 유실되는 상황 등
- TCP 혼잡제어: 네트워크 내의 데이터를 조절하여 오버플로우 현상을 방지하는 기술 / 혼잡 상황을 방지하거나 해결하는 기능
* TCP가 혼잡 발생 인식
- 데이터를 송신하고 타임아웃되어 전송한 세그먼트 재전송할 경우
- 3개 이상의 중복된 ack를 수신할 경우
* 혼잡 발생 전
1) Slow Start
- TCP는 세그먼트들을 Slow Start방식으로 하나씩 전송
- 이때 cwnd의 값은 1
- 1, 2, 4, 8 이런 식으로 cwnd의 값을 지수적 증가 방식을 통해 세그먼트를 임계값까지 전송
- 여기서 임계값 = slow start threshold(=ssthresh)
- ssthrest 값까지 cwnd가 도달하게 되면 TCP는 혼잡 상황으로 갈 위험이 높다고 여겨져 Additive Increase 기법을 사용하여 혼잡을 회피
2) Additive Increase
- cwnd를 하나씩 증가하면서 혼잡을 회피
- 결국 혼잡이 발생한 상황을 감지하게 되면 Multiplicative Decrease 방식 수행
* 혼잡 발생 후
- Multiplicative Decrease: ssthresh 값을 cwnd 1/2로 축소
- 혼잡이 발생한 상황의 경우에 따라 다르게 동작
1) 세그먼트 전송 후 타임아웃 되어서 재전송 해야 하는 상황
2) 3개 이상의 중복된 ACK를 수신한 경우
포트 번호
- 포트 번호: 데이터의 목적지가 어떤 애플리케이션인지 구분하는 번호
* Well - Known 포트 (0 ~ 1023), 국제 인터넷 주소 관리 기구(IANA)에서 지정한 포트 번호
UDP
* UDP 프로토콜
- 효율성
- 비연결형 통신 -> 속도가 빠르다! -> 동영상 스트리밍 방식이 적합!
- 연결 확립 절차 x -> LAN 안에 있는 모든 컴퓨터의 데이터를 일괄적으로 전송!
- 브로드 캐스팅 전송 방식에 적합!
* UDP 세그먼트
- 캡슐화 시 UDP 헤더 부착
'Network > 네트워크 이해' 카테고리의 다른 글
[Network] 응용 계층, 무선 LAN (0) | 2022.11.06 |
---|---|
[Network] 네트워크 계층(OSPF, NAT, ARP, ICMP), 전송 계층 개요 (0) | 2022.10.10 |
[Network] 네트워크 계층 (1) | 2022.10.03 |
[Network] 데이터링크 계층, 네트워크 계층 (1) | 2022.09.26 |
[Network] 네트워크 개요, 물리 계층, 데이터링크 계층 (1) | 2022.09.19 |