1. 개요
TCP가 제공하는 서비스
TCP 헤더 필드
TCP 사양: RFC793[Postel 1981c]
ㄴ이 중 몇 가지 내용 오류나 추가 요구 사항(e.g. 혼잡제어 알고리즘)_호스트 요구사항 RFC(RFC1122)에서 수정/추가
2. TCP 서비스
TCP 서비스
UDP와 같은 네트워크 계층(IP) 이용
UDP와 완전히 다른 서비스 응용 계층에 제공
연결지향의 신뢰성있는 바이트스트림 서비스 제공
=> TCP provides a conneciton-oriented, reliable, byte stream service
연결-지향(connection-oriented) 서비스
: 두 응용 프로세스(보통 클라이언트, 서버)가 데이터 교환하기 전 서로 TCP 연결 확립함
Three-way handshake
ex. 전화 시에 상호간 준비가 되었음을 알리기 위해 Hello라는 인사 말을 서로 교환하는 것
신뢰성(reliability) 서비스
1. 정보 단위인 세그먼트를 IP로 전송
응용이 보내는 데이터는 TCP가 전송하기 적합한 크기로 나뉘어짐
but, UDP는 각 응용이 UDP 데이터그램을 적절한 크기로 만들어 줌
2. 세그먼트를 보낼 때마다 타이머 설정
수신측으로부터 확인 응답(ACK) 메세지 기다림
확인 응답 X -> 세그먼트 재전송
3. 연결의 상대편으로부터 데이터를 받으면 확인응답 보냄_짧은 시간(<1초) 지연 후 전송
4. end-to-end checksum: 헤더와 데이터에 검사합(checksum)을 함
데이터가 전송 중 변화되었는지 검출하는 것이 목적
오류가 난 세그먼트는 버리고 확인 응답 보내지 X (송신자의 타임아웃과 재전송 기다림)
5. TCP 세그먼트는 IP 데이터그램 형태로 전송 -> 순서 지키지 X(out of order) 수신측 도착 가능
/ 수신측 TCP: 필요시 데이터 재정렬 -> 정확한 순서대로 응용에 전달
6. IP: 라우팅 과정에서 중복이 발생해도 허용 but, 수신측 TCP: 중복된 데이터 폐기
7. 흐름 제어(flow control) 제공
TCP 연결의 각 종단: 유한한 버퍼
수신측 TCP: 버퍼용량을 초과하지 않는 범위의 데이터만 버퍼에 저장
송신측 TCP: 수신측 TCP의 빈 버퍼 공간만큼만 보내도록 제어
(송신측 호스트가 너무 빨라서 느린 호스트의 버퍼를 다 쓰는 문제 방지)
바이트 스트림 서비스(bytestream service)
TCP 연결 ~> 양방향의 8-bit byte stream 교환
ㄴ응용에 full-duplex 서비스 제공: 입력 스트림, 출력 스트림 독립
레코드 구분자 삽입 기능 지원 X_응용은 레코드 구분자(메세지를 구분하는 단위) 필요 -> 알아서 삽입
바이트에 대한 해석 X
*Note: TCP의 주요 서비스를 설명하는데 왜 혼잡 제어는 없을까?
"Congestion control is not so much a service provided to the invoking application as it is a service for the Internet as a whole, a service for the general good." quoted from J. F. Kurose and K. W. Ross, Computer Networking, 7th Ed., Pearson, 2017.
위 세 서비스는 RFC 793(1981)에 명시된 것, 그 시절엔 혼잡 제어 X
3. TCP 헤더
포트 번호(port number) 필드
: TCP 세그먼트 송신하고 수신하는 응용 구분하기 위해 사용
IP 주소 하나와 포트 번호 하나의 조합 => 소켓(socket)
클라이언트-서버 두 소켓 => socket pair
(socket pair: 인터넷 상의 TCP 연결을 유일하게 식별하는데 사용 가능한 식별자)
순서 번호(sequence number) 필드
: 송신 측의 TCP로부터 수신 측의 TCP로 가는 데이터 스트림의 바이트를 구분하기 위해 매 바이트에 붙여진 번호
(일종의 byte-address 메모리 주소로 생각 가능)
32비트 부호 없는 번호로서 0부터 2^32 - 1 초과 -> 0부터 다시 시작
새로운 연결 확립 과정, 세그먼트에 SYN 플래그 설정될 경우
-> 순서 번호 필드: 호스트가 연결에 선택한 초기 순서 번호(ISN) 기재
(SYN 플래그는 1 바이트 소모한다고 가정 => 송신 측 첫 데이터 = ISN + 1)
확인 응답 번호(acknowledgement number; ACK number) 필드
수신한 마지막 바이트의 순서 번호 + 1 기재 = 다음 수신할 첫 바이트의 순서 번호
ACK 플래그가 설정되어 있을 때만 유효_연결이 설립된 이후엔 계속 ACK 플래그 설정
TCP에서 순서 번호와 확인 응답 번호 특징
TCP는 각 방향으로 데이터를 흘려보내는 full-duplex 서비스를 응용에 제공
=> 연결의 각 종단 호스트는 각 방향에 대한 순서 번호 저장하고 관리해야 함
Selective ACK(SACK)/ Negative ACK(NACK)를 지원X: 슬라이딩 윈도우 프로토콜
확인 응답 번호 필드의 의미 상, 먼저 도착한 세그먼트나 손상된 세그먼트에 대한 정보 알릴 수 X
(참고: SACK 경우 TCP 옵션으로 추후 추가)
Cumulative ACK: 어디까지 전송완료 되었는지 송신자에게 알림(sliding window)
4비트 헤더 길이(header length) 필드
32비트 워드 단위로 헤더의 길이 명시_옵션 필드로 인해 헤더 길이가 변할 수 있어 필요
4비트 밖에 안되므로 60 바이트 헤더로 길이 제한_옵션 X -> 일반적인 경우엔 20바이트(필드 값 = 5)
6개의 플래그 비트
URG: 긴급 포인터가 유효
ACK: 확인응답 번호가 유효
PSH: 수신측 데이터를 가능한 빨리 응용으로 보내야 함
RST: 연결 재설정
SYN: 연결 초기화하기 위해 순서 번호 동기화
FIN: 송신 측이 데이터 전송 종료
검사합(checksum) 필드
: TCP header/ TCP data 모두에 대한 checksum
필수 필드, 송신측: 계산, 저장되고 수신측: 검사
UDP 검사합과 같은 의사(pseudo) 헤더 이용하여 계산
긴급 포인터(URGent pointer) 필드_요즘 거의 사용 X
: (데이터 필드 앞부분에 삽입된) 긴급 데이터의 크기
URG 플래그가 설정되어 있을 때만 유효
송신 측이 상대편에게 긴급한 데이터 보낼 수 있음_긴급 데이터는 순서 번호에 계상 X
4. 요약
TCP: 신뢰성 있는/ 연결-지향/ 바이트스트림 서비스 제공
세그먼트로 분할
타임아웃 설정
확인 응답 보냄
순서 정렬
중복된 데이터 폐기
종단-대-종단 흐름제어 제공
검사합 계산, 검사
Telnet, Rlogin, FTP, 전자메일(SMTP)에 이용
'Computer Science > 네트워크' 카테고리의 다른 글
[Network Security] DNS and DNS attack (0) | 2022.10.12 |
---|---|
[TCP/IP Networks] 8. TCP Connection Establishment and Termination (0) | 2022.10.06 |
[TCP/IP Networks] 6. UDP: User Datagram Protocol (0) | 2022.10.01 |
[TCP/IP Networks] 5. Address Resolution Protocol, ARP (1) | 2022.10.01 |
[TCP/IP Networks] 4. Internet Protocol (0) | 2022.09.24 |