IP 패킷은 신뢰성이 없고 연결을 수립하는 과정이 없다.
⇒ 호스트 간의 연결이 이루어지지 않고 패킷이 수신됐다는 것을 보장할 수 없다.
왜? 그럴까?
빠른 전송 속도가 중요하다.
패킷 한 두 개 쯤 손실이 발생해도 큰 지장이 없다.
패킷은 실행 중인 특정 프로세스까지 전달되어야 한다.
한 호스트 내에서 각 프로세스를 구분할 수 있는 정보가 바로 포트이다.
포트 번호는 16bit로 표현
⇒ 216개 존재
⇒ 0 - 65536
e.g.)
IP 주소를 변환하는 기술이다.
LAN에서 사용되는 사설 IP ↔ WAN에서 사용되는 공인 IP
비교적 적은 공인 IP, 비교적 다수의 사설 IP ⇒ 모든 IP 주소를 일대일 매칭하는 것은 불가능
포트를 기반으로한 NAPT(Network Address Port Translation)이 해결 방안이 될 수 있다.
같은 공인 IP 주소를 서로 다른 사설 IP 주소로 식별하기 위해 NAT 테이블에 포트를 함께 기술하여 사용한다.
한국어 | 영어 | 역할 |
---|---|---|
순서 번호 | sequence number | 송수신하는 세그먼트의 올바른 순서를 보장 세그먼트 데이터의 첫 바이트에 부여되는 번호 |
확인 응답 번호 | acknowledgement number | 상대 호스트가 보낸 세그먼트에 대한 응답 다음 수신하기를 기대하는 순서 번호 명시 |
제어 비트 | control bits | 세그먼트에 대한 부가 정보(CWR-FIN) |
제어 비트 | 역할 |
---|---|
ACK | 세그먼트의 승인을 나타내기 위한 비트 |
SYN | 연결을 수립하기 위한 비트 |
FIN | 연결을 종료하기 위한 비트 |
TCP는 three-way handshake로 연결을 수립하고 four-way handshake 과정으로 연결을 종료한다.
위의 과정에서 TCP 상태만 살펴보면 아래 이미지와 같다.
TCP는 아래 두 가지 상황에서 오류가 발생했다고 판단하고 세그먼트를 재전송한다.
호스트가 한 번에 받아서 처리할 수 있는 세그먼트의 양에는 한계가 있다.
따라서 송신 호스트가 수신 호스트의 처리 속도를 고려하며 송수신 속도를 균일하게 유지해야한다.
이때 슬라이딩 윈도우 알고리즘을 활용한다.
혼잡(congestion)이란, 트래픽이 많아 세그먼트가 유실되거나 처리속도가 늦어지는 현상을 말한다.
혼잡 윈도우란, 혼잡 없이 전송할 수 있는 데이터의 양을 말한다.
따라서 혼잡 윈도우를 적절히 설정하는 것이 중요하다.
혼잡 제어를 위한 가장 기본적인 알고리즘은 AIMD(Additive Increase/MultiplicativeDecrease)이다.
말 그대로 혼잡 감지 X ⇒ 혼잡 윈도우를 RTT마다 1 증가 / 혼잡 감지 ⇒ 혼잡 윈도우 반감
조금 더 정교한 알고리즘으로 아래 세 가지가 있다.
느린 시작
혼잡 윈도우를 1부터 시작해, 문제 없이 수신된 ACK 세그먼트 1개당 1씩 증가
혼잡 감지 시
상황 분류 | 해결 방법 |
---|---|
타임 아웃 | 혼잡 윈도우 = 1 느린 시작 임계치를 이전의 절반으로 초기화 느린시작 재개 |
혼잡 윈도우 >= 느린 시작 임계 | 느린 시작 종료, 혼잡 회피 |
3번의 중복 ACK 세그먼트 | 빠른 재전송 후 빠른 회복 |
혼잡 회피
빠른 회복
<참고 자료>