인터넷상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함게 사용하는 프로토콜
◻ TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 *패킷을 추적 및 관리하게 된다.
◻ 연결지향 프로토콜로서 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 프로토콜을 의미한다.
◻ 고정된 통신 선로를 통해 순차적으로 데이터를 전달하므로, TCP는 안정적이다.
◻ TCP는 패킷을 성공적으로 전송하면(ACK) 라는 신호를 날리고 만약에 ACK 신호가 제 시간에 도착하지 않으면 Timeout이 발생하여 패킷 손실이 발생한 패킷을 다시 전송해준다.
◻ 확인 응답을 주고받는 절차가 있으므로 통신의 신뢰성이 올라간다.
◻ 데이터로 보내기 전에 반드시 연결이 형성되어야한다.
◻ 1:1 통신만 가능함.
◻ 고정된 통신 선로가 최단선이 아닐경우 상대적으로 UDP보다 데이터 전송속도가 느리다.
- 연결형 (connnection-oriented) 서비스로 연결이 성공해야 통신이 가능하다.
- 데이터의 경계를 구분하지 않는다. (바이트 스트림 서비스)
- 데이터의 전송 순서를 보장한다. (데이터의 순서 유지를 위해 각 바이트마다 번호를 부여)
- 신뢰성있는 데이터를 전송한다. (Sequence Number, Ack Number를 통한 신뢰성 보장)
- 데이터 흐름 제어(수신자 버퍼 오버플로우 방지) 및 혼잡 제어(패킷 수가 과도하게 증가하는 현상 방지)
- 연결의 설정(3-way handshaking)과 해제(4-way handshaking)
전이중(Full-Duplex), 점대점(Point to Point) 서비스- UDP보다 전송속도가 느리다.
EX) 파일전송과 같은 신뢰성있는 전송이 중요할 때 사용한다.
◻ 전송계층의 비연결 지향적 프로토콜이다.
◻ 데이터를 주고 받을때 연결 절차를 거치지 않고 발신자가 일방적으로 데이터를 발신하는 방식을 의미한다.
◻ 연결 과정이 없기 때문에 TCP보다는 빠른 전송을 할 수 있지만 데이터 전달의 신뢰성은 떨어진다.
◻ 발신자가 데이터 패킷을 순차적으로 보내더라도 이 패킷들은 서로 다른 통신 선로를 통해 전달 될 수 있으며, 먼저 보낸것이 나중에 도착하거나 유실될 수도 있다.
위 경우 UDP는 유실이나 변조가 되어도 재전송을 하지 않는다.
◻ 데이터 신뢰성이 없다.
◻ 의미있는 서버 구축을 위해서는 일일이 관리해주어야한다.
- 비연결형 서비스로 연결 없이 통신이 가능하며 데이터그램 방식을 제공한다.
- 데이터 경계를 구분한다. (데이터그램(datagram) 서비스)
- 정보를 주고 받을때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
- 신뢰성 없는 데이터를 전송한다. (데이터 재전송과 데이터 순서 유지를 위한 작업을 하지 않는다.
- 패킷관리가 필요하다.
- 패킷 오버헤드가 적어 네트워크 부하가 감소되는 장점.
- 상대적으로 TCP보다 전송속도가 빠르다.
+@ UDP의 헤더정보
⁉ 공통점
포트 번호를 이용하여 주소를 지정한다.
데이터 오류 검사를 위한 체크섬이 존재한다.
TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 three-way handshake를 사용한다.
◻ TCP 3 Way Handshake는 TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
💨 접속을 성공적으로 성립하기위해 반드시 필요한 과정이다.
◻ 양쪽 모두 데이타를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이타 전달이 시작하기전에 한쪽이 다른 쪽이 준비되었다는 것을 알수 있도록 한다.
◻ 양쪽 모두 상대편에 대한 초기 순차일련변호를 얻을 수 있도록 한다.
step1
A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 되는 것이다.
step2
B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.
step3
A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 B서버 상태가 ESTABLISHED 이다.위와 같은 방식으로 통신하는것이 신뢰성 있는 연결을 맺어 준다는 TCP의 3 Way handshake 방식이다.
◻ 세션을 종료하기 위해 수행되는 절차이다.
step1
클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.
step2
서버는 일단 확인메시지를 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태가 TIME_WAIT상태다.
step3
서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
step4
클라이언트는 확인했다는 메시지를 보낸다.