
TCP/IP stack이 실질적으로 인터넷에서 사용된다.
TCP, UDP - transport layer
IP - internet layer

TCP/IP 모델에서 link layer, internet layer, transport layer는 하드웨어, 펌웨어, OS 레벨에서 구현, 관리한다. 즉 시스템 레벨에서 관리된다. 네트워크 기능을 지원하는 목적을 가진다.

application layer는 애플리케이션 레벨에서 구현, 관리 소프트웨어 레벨에서 관리된다. 네트워크 기능을 사용하는데 목적이 있다.


process와 연결되어 data path 혹은 data channel 역할을 한다.

각 port는 name을 통해 식별된다. port에 name을 부여하는 방법은 시스템 마다 다르다.

★ internet protocol은 신뢰성이 낮다. 즉, 호스트 <-> 호스트 데이터를 요청, 전송은 가능하지만, 신뢰성이 낮으며 데이터 유실 및 데이터 순서가 보장되지 않는다.
즉, 프로세스 간의 통신에서 데이터의 유실이 없고 정확한 데이터 교환이 필요한 안정적인 프로토콜의 필요성이 강조되었다. > TCP(프로세스간 데이터 교환이 안정적이도록 보장한다.)

TCP(transmission control protocol) : connection-oriented, 연결 지향 프로토콜, IP 프로토콜 위에서 동작하며, 신뢰성있는 프로토콜

Connection : 프로세스 간의 안정적이고 논리적인 통신 통로, 3-way handshake를 통해 connection을 연결 후 호스트 간 데이터 송 수신한다. 데이터 교환을 마친 뒤 4-way handshake를 통해 호스트간 connection 종료 (SIN, ACK, FIN)

인터넷 상에서 port를 유니크하게 식별하기 위해 port number 정의(16 bits)
하지만, port만으로 애플리케이션을 유니크하게 식별할 수 없다. 따라서 IP 주소 및 port 번호를 통해 호스트와 애플리케이션을 구분할 수 있다.

UDP(user datagram protocol) : connectionless, 연결을 맺지 않고 바로 데이터를 주고 받는다.
internet protocol을 거의 그대로 사용하기 때문에, 신뢰성이 낮지만 처리 속도는 빠르다.


Socket : IP 주소와 Port 번호를 조합한 유니크한 주소, 인터넷 상에서 존재하는 각 port를 유니크하게 식별하기 위한 주소
★각 socket은 인터넷 상에서 유니크 해야한다.

각 connection은 unique하게 식별되어야하며 한 쌍의 socket을 통해 connection을 유니크 하게 식별한다.
클라이언트의 socket 과 서버의 socket이 한쌍을 이루고, connection을 유니크하도록 보장한다.
클라이언트 IP주소:Port - 서버 IP주소:Port
하나의 socket은 동시에 여러 connection들에서 사용될 수 있다. 하지만, 각 connection은 유니크하게 식별된다. 각 호스트간 connection은 유니크 하지만, 하나의 소켓을 통해 여러 호스트와 커넥션을 맺을 수 있다.
socket과 커넥션은 유니크 해야한다.

<protocol, ip address, port number>로 Socket은 유니크하게 식별된다.

protocol, ip address, port number중 하나 이상의 값이 다르게 형성되어 있어야 유니크 하게 식별된다.

클라이언트 -> 프로토콜, IP주소, port
서버 -> 프로토콜, IP주소, port

하나의 호스트에서 port번호로 구분되어 여러가지 애플리케이션이 서버와 유니크하게 통신한다.

하나의 socket이 여러 connection에서 사용할 수 있다.
