TCP는 5계층 중에 L4에있는 프로토콜 모델 입니다.
TCP의 Communication Path는 Transport 쪽에서 이루어 집니다.
Process sends/receives messages to/from its socket
Socket analogous to door
- Sending process shoves message out door
- Sending process relies on transport infrastructure on other side of door to deliver message to socket at receiving process
그래서 다른 컴퓨터 상에 위치하는 프로세스와 통신을 하기 위한 인터페이스들을 다 OS 내부에서 다 만들어놨습니다. 그게 바로 소켓 입니다. 이 소켓이라는 구조체를, 인터페이스를 만들어서 프로세스를 연결시켜 놓으면, 한 프로세스에서 소켓에다가 그냥 write 해버리면 다른 프로세스에서는 read가 되면서 전달이 됩니다.
한 프로세스에서 쓰면 다른 프로세스에서 읽을 수 있게 이렇게 하려면 뭔가 사전에 두 프로세스를 연결시켜 놔야 합니다. 그럼 연결시키려면 최소한 다른 프로세스의 소켓과 연결하고 싶다는 의사표현을 해야합니다.
그래서 저 소켓의 주소를 알아야 합니다. 그래서 이 소켓을 인덱싱하는, 이 소켓의 주소 역할을 하는 인덱싱이 필요합니다. 그게 바로 IP 주소와 포트 넘버의 조합이야. IP 주소라는 건 뭐라고 얘기했냐면 아까 인터넷 상에 존재하는 컴퓨터를 지칭하는 주소라고 할 수 있습니다.
그런데 이 컴퓨터 상에 프로세스들이 많을 것 입니다. 그래서 컴퓨터 안의 특정 프로세스를 지칭해야 합니다. 그게 바로 포트의 역할 입니다. 더 자세히 얘기하면 이 포트에 물린 이 소켓이 누구이구나 하는 의미 입니다.
예를 들면 네이버 접속하고 싶다면 네이버 프로세스에 해당하는 이 소켓. 새 주소를 여러분들이 입력해야지 여기에 접속이 됩니다. 웹 브라우저 상에서 www.naver.com 이렇게 입력을 하지만 실제로는 네이버의 컴퓨터의 IP 주소와, 네이버 웹 서버 프로세스가 돌고 있는 이 소켓에 해당하는 포트 넘버 80번을 입력해야 실제로 이 아이피 주소와 포트랑 연결됩니다.
외우기 귀찮아서 DNS라는 시스템에 의해서 도메인이 네이버의 IP 주소로 변환되고, 그렇게 해서 여기 접근이 가능하게 됩니다. 포트 입력 안 하면 그냥 80번 알아서 넣어줍니다. 포트 넘버는 포트의 다름으로 인한 비용 절감을 위해 공통된 포트넘버를 쓰게 됩니다.