제22장
- 컴퓨터 시스템은 데이터가 손실, 중복되지 않거나 순서가 어긋나지 않도록 보장
- 인터넷에서 동작하는 소프트웨어도 컴퓨터 시스템과 같은 의미를 제공 - 즉, 소프트웨어는 빠르고 신뢰성있는 통신을 보장
- 신뢰성은 전송 프로토콜의 책임 - 많은 어플리케이션을 위한 기본 기능
- TCP는 TCP/IP 프로토콜에서 신뢰성을 제공하는 전송 계층 프로토콜
- Connection Orientation : 어플리케이션은 먼저 목적지에 연결을 요구해야 하고 자료 전송을 위해 그 연결을 사용하는 연결 지향 서비스를 제공
- Point-to-Point Communication : 각 TCP는 정확히 두 종단을 가짐
- Complete Reliability : 연결을 통하여 전송된 데이터는 데이터 손실이나 순서 바뀜없이 정확한 전달을 보장
- Full Duplex Communication : 데이터의 양방향 전송을 보장하고 어플리케이션이 언제든 데이터 전송을 허용, TCP는 양방향으로 들어오고 나가는 데이터 버퍼링 가능
- Stream Interface : 어플리케이션이 연결을 통하여 연속적인 8비트 스트림 전송을 제공
- Reliable Connection Startup : 두 어플리케이션이 연결을 열 때 새로운 연결에 대한 동의를 요구
- Graceful Connection Shutdown : TCP는 연결을 닫기 이전에 신뢰성있게 모든 데이터 전달을 보장
TCP : 신뢰성있는 전송 서비스
신뢰성있는 전송 서비스의 필요성
TCP(Transmission Control Protocol)
TCP 제공 서비스
End-to-End Service(p.356, 그림22.1)
![사용자 삽입 이미지](https://t1.daumcdn.net/tistoryfile/fs3/18_2_6_10_blog87301_attach_4_413.gif?original)
- TCP에 의해 제공되는 연결은 소프트웨어로 이루어지므로 가상연결(Virtual Connection)
- TCP는 메시지 전달을 위해 IP를 사용
- 각 TCP는 IP 데이터그램 내에 캡슐화되어 인터넷을 통해 전송
- 데이터그램이 목적지에 도착했을 때 IP는 TCP에 내용을 전달
- 여기서, IP는 메시지를 읽거나 해석하지 않음
- TCP는 연결된 두 종단에서 호스트를 연결하는 패킷 통신으로 IP를 처리하고, IP는 전송된 데이터로써 각 TCP 메시지를 처리
-
패킷 손실과 재전송
- TCP의 신뢰성을 보장하는 것을 복잡하고 어려운 문제
- 가장 중요한 기법은 재전송으로 이를 이용하여 패킷 손실을 보정
- 자료를 전송할 때마다 TCP는 타이머를 시작하여 일정 시간이 지나도록 받았다는 확인이 없으면 재전송(p.358, 그림22.2)
![사용자 삽입 이미지](https://t1.daumcdn.net/tistoryfile/fs2/18_2_6_10_blog87301_attach_3_380.gif?original)
- 적응적 재전송(Adaptive Retransmission)
- 응답을 받는 시간을 측정하여 연결의 왕복지연시간 결정
- TCP는 이것의 분산을 예측하여 재전송을 위한 값으로써 예측된 평균과 분산의 선형 조합을 사용하여 재전송 시간 지연에 반영
- 재전송 시간의 비교(p.360, 그림22.3)
- 다른 왕복 지연을 갖는 두 연결에서 패킷 손실의 경우를 고려
- TCP는 평균 왕복 지연보다 약간 큰 값을 재전송 시간으로 설정
- 지연이 큰 경우 작은 재전송 시간을 사용하고 작으면 작은 재전송 시간을 사용
![사용자 삽입 이미지](https://t1.daumcdn.net/tistoryfile/fs3/18_2_6_10_blog87301_attach_4_414.gif?original)
Buffers, Flow Control, and Windows
- TCP는 데이터의 흐름 제어를 위해 Window 메커니즘을 사용
- 연결 설립시 : 연결의 각 종단은 들어오는 자료를 저장하는 버퍼를 할당하고 그 크기를 상대방에게 전송
- 데이터 도착시 : 수신자는 받았다는 확인을 전송하는데, 이 확인에는 남아있는 버퍼의 크기를 설명
- 수신자는 각 확인과 함께 Window Advertisement를 전송
: 어떤 시점의 사용가능한 버퍼의 크기를 Window라 하고 그 크기를 설명하는 지시를 Window Advertisement
예) p.361, 그림22.4
![사용자 삽입 이미지](https://t1.daumcdn.net/tistoryfile/fs3/18_2_6_10_blog87301_attach_4_415.gif?original)
3-Way Handshake
- 신뢰성있는 연결의 설립과 종료를 보장하기 위하여 TCP는 3개의 메시지가 교환되는 3-Way Handshake를 이용(p.362, 그림22.5)
- 동기화 세그먼트(SYN segment) : 연결을 설정하는데 사용하는 3-Way Handshake의 메시지를 설명
- 종료 세그먼트(FIN segment) : 연결을 종료하는데 사용하는 3-Way Handshake의 메시지를 설명
- Acknowledgement(ACK) : 각 방향에서 전송된 ACK는 연결이 종료하기 전에 모든 데이터가 도착했다는 것을 보장
![사용자 삽입 이미지](https://t1.daumcdn.net/tistoryfile/fs3/18_2_6_10_blog87301_attach_4_416.gif?original)
- 3-Way Handshake에서는 양측이 SYN이나 FIN에 대한 각 ACK를 보내기 전에는 연결을 새로 열거나 닫지 않음
- 양 종단에 연결을 설정하기 위해 TCP는 임의의 32비트 연속 수 생성을 요청
Congestion Control
- 최근, 패킷 손실은 하드웨어 오류보다 혼잡으로 인해 더 많이 발생
- 메시지 재전송이 혼잡을 더 악화시키므로 패킷 손실로써 혼잡을 평가하고 재전송되는 데이터의 비율을 감소
- 메시지 손실 때마다 TCP는 혼잡 제어를 시작
- TCP는 데이터를 포함하는 하나의 메시지를 전송함으로써 시작
- 부가적인 손실없이 ACK가 도착하면 데이터를 두 배로 하여 전송
- 역시 부가적인 손실없이 ACK가 도착하면 데이터를 또 두 배로 하여 전송함으로써 계속 반복
- 수신자의 Window Advertisement의 절반이 될 때까지 지수적으로 증가하고 그 이후에는 감소
- TCP의 혼잡 제어 방안은 인터넷에서 증가하는 통신량에 만족스럽게 반응
- TCP 혼잡 제어 방안은 혼잡한 인터넷에 재전송을 부가하는 것을 방지
TCP Segment Format(p.364, 그림22.6)
![사용자 삽입 이미지](https://t1.daumcdn.net/tistoryfile/fs3/18_2_6_10_blog87301_attach_4_417.gif?original)
- TCP는 모든 메시지에 대해 하나의 형식을 사용
:메시지를 Segment라는 용어로 사용- 데이터를 운반하는 메시지
- Acknowledgement
- 연결을 생성하거나 종료하는데 사용하는 3-way Handshake 부분의 메시지
- Acknowledgement Number : 수신된 데이터의 순서 번호
- Window : 더 많은 데이터를 위한 사용가능한 버퍼 공간의 크기
- Sequence Number : 보내는 자료를 위한 참조로 세그먼트 내에 전달되는 데이터의 순서 번호
- Destination Port : 수신측 컴퓨터의 어플리케이션이 데이터를 받는 것을 식별
- Source Port : 송신측 컴퓨터의 어플리케이션이 데이터를 전송하는 것을 식별
- Checksum : TCP 세그먼트 헤더와 데이터에 적용되는 checksum을 포함