
이렇게 말해줘도 안하면 진짜 취업하기 싫은거임ㅋ - 멋진 멘토님
TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP로 이루어져 있습니다. IP는 패킷 전달여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있습니다. TCP는 IP위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해 줍니다. HTTP, FTP, SMTP등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP위에서 동작하기 때문에, 묶어서 TCP/IP로 부르기도 합니다.
네트워크 계층 중 전송 계층에서 사용하는 프로토콜로서, 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 연결을 설정하여 신뢰성을 보장하는 연결형 서비스 입니다. TCP는 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟(데이터, 메세지, 세그먼트라는 블록 단위)를 안정적으로, 순서대로, 에러없이 교환할 수 있게 합니다.
가상 회선 방식을 제공합니다.
3-way handshaking 을 통해 연결을 설정.4-way handshaking 을 통해 연결을 해저. 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지
윈도우사이즈(window size) 값을 통해 수신량을 정할 수 있음.네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지
Dupack-based retransmission
Timeout-based retransmission
확인응답(ACK, Acknowledgement)?
송신된 메세지가 수신측에서 정상적으로 수신되었음을 송신측으로 확인 응답하는 것, 오류제어 및 흐름제어를 위해 사용
멀티태스킹이나브로드캐스팅을 지원하지 않는다.
TCP Connection (3-way handshake)
1. 먼저 open()을 실행한 클라이언트가 SYN을 보내고 SYN_SENT 상태로 대기한다.
2. 서버는 SYN_RCVD 상태로 바꾸고 SYN과 응답 ACK를 보낸다.
3. SYN과 응답 ACK을 받은 클라이언트는 ESTABLISHED 상태로 변경하고 서버에게 응답 ACK를 보낸다.
4. 응답 ACK를 받은 서버는 ESTABLISHED 상태로 변경한다.
TCP Disconnection (4-way handshake)
1. 먼저 close()를 실행한 클라이언트가 FIN을 보내고 FIN_WAIT1 상태로 대기한다.
2. 서버는 CLOSE_WAIT으로 바꾸고 응답 ACK를 전달한다. 동시에 해당 포트에 연결되어 있는 어플리케이션에게 close()를 요청한다.
3. ACK를 받은 클라이언트는 상태를 FIN_WAIT2로 변경한다.
4. close() 요청을 받은 서버 어플리케이션은 종료 프로세스를 진행하고 FIN을 클라이언트에 보내 LAST_ACK 상태로 바꾼다.
5. FIN을 받은 클라이언트는 ACK를 서버에 다시 전송하고 TIME_WAIT으로 상태를 바꾼다. TIME_WAIT에서 일정 시간이 지나면 CLOSED된다. ACK를 받은 서버도 포트를 CLOSED로 닫는다.
🚨주의
CLOSE_WAIT 상태를 갖는 것은 아니다.FIN을 보낼 수 있고, 이런 경우 서버가 FIN_WAIT 상태가 됩니다.close를 요청하느냐에 따라 상태가 달라질 수 있습니다.IP를 사용하는 네트워크 내에서 컴퓨터들 간에 메시지들이 교환될 때 제한된 서비스만을 제공하는 통신 프로토콜이다. UDP는 TCP의 대안이며, IP와 함께 쓰일 때에는 UDP/IP라고 표현하기도 한다. TCP와 마찬가지로 UDP도 한 컴퓨터에서 다른 컴퓨터로 데이터그램이라고 불리는 실제 데이터 단위를 받기 위해 IP를 사용한다. 그러나 UDP는 TCP와는 달리, 메시지를 패킷(데이터그램)으로 나누고, 반대편에서 재조립하는 등의 서비스는 제공하지 않으며, 특히 도착하는 데이터 패킷들의 순서를 제공하지 않는다. 이 말은 UDP를 사용하는 응용프로그램은, 전체 메시지가 올바른 순서로 도착했는지에 대해 확인할 수 있어야한다는 것을 의미한다. 교환해야할 데이터가 매우 적은(그러므로 재조립해야할 메시지도 매우 적은) 네트웍 응용프로그램들은 처리시간 단축을 위해 TCP 보다 UDP를 더 선호할 수 있다. 일례로 TFTP는 TCP 대신에 UDP를 사용한다.
| TCP | UDP |
|---|---|
| 연결지향형 프로토콜 | 비 연결지향형 프로토콜 |
| 바이트 스트림을 통한 연결 | 메세지 스트림을 통한 연결 |
| 혼잡제어, 흐름제어 | 혼잡제어와 흐름제어 지원 X |
| 순서 보장, 상대적으로 느림 | 순서 보장되지 않음, 상대적으로 빠름 |
| 신뢰성 있는 데이터 전송 - 안정적 | 데이터 전송 보장 X |
| TCP packet : Segment | UDP packet : Datagram |
| HTTP, Email, File transfer에서 사용 | DNS, Broadcasting (도메인, 실시간 동영상 서비스에서 사용) |
UDP? 컴퓨터실에서 스타할 때 나오던 용어가 이런 의미였다니...?!?! 그리고 내가 인터넷을 사용할때 이렇게 많은 일이 한번에 실행되고 있다는 점도 놀라웠다.