
데이터가 의도된 목적지에 닿을 수 있도록 보장해주는 통신 규약
- 연결형 서비스
- 연결 설정 및 연결해제 필요
- 양단간 어플리케이션/프로세스는 TCP가 제공하는 연결성 회선을 통하여 서로 통신
- 비교적 느림. 정확한 데이터 전달
⇒ 고정된 통신 선로가 최단선(네트워크 길이)이 아닐경우
- 신뢰성 높음
⇒ 패킷 손실, 중복, 순서바뀜 등이 없도록 보장
- 1 : 1 통신만 가능함
- 데이터의 전송 순서를 보장
⇒ 데이터의 순서 유지를 위해 각 바이트마다 번호를 부여
- 데이터의 경계를 구분하지 않는다
⇒ 바이트 스트림 서비스
(한 번에 한 바이트씩 연속적으로 전송되는 데이터의 흐름과 같이 끊임없이 연속되는 바이트 열)
- 데이터 흐름 제어(수신자 버퍼 오버플로우 방지) 및 혼잡 제어(패킷 수가 과도하게 증가하는 현상 방지)
- 비연결형 서비스
- 메세지가 제대로 도착했는지 확인하지 않음 (확인응답 없음)
- 수신된 메세지의 순서를 맞추지 않음 (순서제어 없음)
- 흐름 제어를 위한 피드백을 제공하지 않음 (흐름제어 없음)
- 검사합을 제외한 특별한 오류 검출 및 제어 없음 (오류제어 거의 없음)
- UDP를 사용하는 프로그램 쪽에서 오류제어 기능을 스스로 갖추어야 함
- 데이터그램 지향의 전송계층용 프로토콜 (논리적인 가상회선 연결이 필요없음)
- 빠른 데이터 전달 focusing, 1 대 다 통신 가능
⇒ 실시간 응용 및 멀티캐스팅 가능
- 신뢰성 보단 연속성
- 데이터 경계를 구분
⇒ 데이터그램(datagram) 서비스
(메시지 단위로 전송되며 크기가 초과하면 잘라서 보내짐)
- 패킷 오버헤드가 적어 네트워크 부하가 감소 (헤더 비트 수 고정)

응용 계층부터 물리 계층까지 계층별로 데이터를 전달할 때, 헤더를 붙히는 것
물리 계층부터 응용 계층까지 계층별로 데이터를 전달할 때, 헤더를 제거하는 것

TCP로 전송할 때 붙히는 헤더

세그먼트 : TCP헤더가 붙은 데이터
TCP는 연결형 통신에 사용되는 프로토콜
⇒ 데이터를 전송하려면 먼저 독점 통신로 확보해야함
HOW?

연결의 제어 정보가 기록
각 비트 별로 역할이 있다. 모두 초기 값은 0이고, 비트가 활성화되면 1이 된다.
연결을 확립하려면 SYN과 ACK가 있어야 한다.
SYN : 연결 요청
ACK : 확인 응답
실제 데이터를 보내거나 받을 때 사용
일련번호:
TCP는 데이터를 분할해서 보내는데 일련번호는 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려주는 역할
확인 응답 번호
수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할 (예를 들어, 10번 데이터를 받았으면 11번 데이터를 달라고 요청)

UDP 데이터그램 : UDP 헤더가 붙은 데이터

- 통신을 하려면 B에게 허가를 받아야 하므로, A에서 B로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.
- B는 A가 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)을 보낸다. 동시에 B도 컴퓨터 A에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)을 보낸다.
- B의 요청을 받은 A는 B로 허가한다는 응답으로 연결 확립 응답(ACK)을 보낸다.

연결을 끊을 때는 FIN, ACK를 사용
- A에서 B로 연결 종료 요청(FIN)을 보낸다.
- B에서 A로 연결 종료 응답(ACK)을 반환한다.
- B에서도 A로 연결 종료 요청(FIN)을 보낸다.
- A에서 B로 연결 종료 응답(ACK)을 반환한다.
Client가 전송할 데이터가 없다고해도 Server에서 보내야하는 데이터가 아직 남아있을 수 있기때문에 우선 FIN에 대한 ACK를 먼저 보내고 남은 데이터 전송 후에 FIN을 보낸다.
Client에서 세션을 종료시킨 후 늦게 도착하는 패킷은 drop되고 데이터는 유실된다. 이런 상황에 대비하여 Client는 Server로부터 FIN을 수신하고 일정시간(default 240sec)동안 세션을 남겨두고 잉여 패킷을 기다린다. (TIME_WAIT 과정)
Connection을 맺을 때 사용하는 Port는 유효한 범위 내에서 사용하고 시간이 지남에 따라 재사용
-> 두 통신 호스트가 과거에 사용된 Port 번호 쌍을 사용하는 가능성 존재
Server에서는 SYN을 보고 패킷을 구분, 난수가 아닌 순차적 Number가 전송된다면 이전 Connection으로부터 오는 패킷으로 인식할 수 있다. 이런 문제 가능성을 줄이기 위해 난수로 ISN 설정
0에서 시작하는 ISN은 이어지는 Seq를 쉽게 예측하게 만들어 공격에 취약해진다.