TCP(Transfer Control Protocol)
- 두 개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 네트워크 프로토콜
- 어플리케이션에 신뢰적이고, 연결지향성 서비스를 제공
- 일반적으로 TCP와 IP를 함께 사용하며 IP는 전달을, TCP는 패킷정보의 추적/관리는 담당
인터넷 프로토콜 스택 4계층
- 어플리케이션 계층 - HTTP , FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층
프로토콜 계층

메시지 전송 예시
- 웹 브라우저 채팅 프로그램에 Hello, World! 작성
- 웹 브라우저에서 SOCKET라이브러리를 통해 TCP/UDP로 연결 및 메시지 데이터 전달
- TCP 정보 생성 및 메시지 데이터 포함
- IP 패킷 생성 및 TCP 데이터 포함 후 이더넷을 통한 데이터 전송
TCP/IP 패킷 정보

패킷 정보에 PORT정보가 존재하는 이유는 전송하려는 서버/클라이언트의 어떤 용도의 프로그램의 패킷정보인지 알 수 없기 때문에,
PORT를 이용하여 구분
TCP 특징
연결지향 - TCP3 Way HandShake

- 클라이언트가 서버로 SYN 접속을 요청
- SYN(synchronize sequence numbers): 연결 확인을 보내는 무작위의 숫자 값
- 접속 요청을 받은 서버는 ACK 접속 수락을 하고, 클라이언트로 SYN 접속 요청
- 서버의 SYN 접속 요청을 받은 클라이언트는 ACK 접속 요청 수락
- ACK(acknowledgements) - Client 혹은 Server로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK
- 클라이언트 <-> 서버간 데이터 전송
TCP 3 Way HandShake
- 양쪽 모두 데이터 전송 준비가 됐다는 것을 보장하고, 실제 전달이 시작하기전에 한쪽이 다른쪽으로 준비되었다는 것을 알 수 있도록하는 것
TCP3 Way Handshake 연결은 인터넷망 상의 물리적 연결이 아닌 IP간의 가상 연결 상태임
데이터 전달을 보증

- 클라이언트에서 서버로 데이터를 전송
- 서버에서 전송받은 데이터를 검증하여 클라이언트로 전송 여부 응답
순서를 보장

- 클라이언트에서 패킷1,패킷2, 패킷3 순서로 서버에 전송
- 서버에서 패킷1, 패킷3, 패킷2 순서로 도착했을 경우 패킷1을 제외 데이터를 전부 삭제
- 서버는 클라이언트에게 패킷2부터 재전송 요청
신뢰성 있는 프로토콜
현재 대부분 사용
UDP(User Datagram Protocol)
- 데이터를 데이터그램 단위로 처리하는 프로토콜
- 비연결성 프로토콜이며, 할당되는 논리적인 경로가 존재하지 않고, 각각의 패킷이 다른 경로로 전송되고 각각의 패킷은 독립적인 관계를 가지게되며 데이터를 서로 다른 경로로 독립 처리하는 프로콜
- 연결/해제 과정이 존재하지 않으며 다른 경로로 독립 처리함에도 패킷에 순서를 부여하여 재조립하거나 흐름제어 및 혼잡제어를 수행하지 않아 속도가 빠름
- 네트워크 부하가 적다는 장점이 존재하나, 데이터 전송의 신뢰성은 낮음
- 연속성이 중요한 실시간 서비스에 좋음
UDP 특징
- 하얀 도화지에 비유(기능이 거의 존재하지 않음)
- 연결지향(TCP3 3Way handShake X)
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
- 정리
- IP와 거의 같고, PORT와 CHECKSUM이 추가
- 어플리케이션에서 추가 작업이 필요
참고 자료
모든 개발자를 위한 HTTP 웹 기본 지식
TCP/UDP 특징과 차이점 비교
TCP/UDP handshake동작 방식