首先需要了解:
ip层提供的是主机到主机的数据传输服务,而传输层提供的端口到端口的数据传输服务。
1.端口是什么?
在我们进行socket(TCP)编程的时候,当我们创建调用socket的API成功时候,会得到一个整型的返回值welcome_sock。可以理解为一个句柄.
然后指定一个端口(假如端口号为8888),然后与ip(假如IP为192.168.1.1)进行bind。
那么这个时候welcome_sock就和8888与192.168.1.1就是绑定在一起的了。
之后调用accept,监听welcome_sock,等待客户端连接。当客户端连接后,会再返回一个client_sock,这个时候client_sock除了绑定源端口和源IP(8888与192.168.1.1),还会绑定目标端口和目标IP。(需要注意的是对于客户端,8888与192.168.1.1是属于目标端口和目标IP)
那么这个时候,这个client_sock就是一个四元组标识着源端口、源IP、目标端口、目标IP,当客户端有数据发送过来,就可以根据客户端的目的端口,服务器端就可以找到对应的进程。
也就是端口是进程的标识。
2.socket是什么?
根据上述来讲,socket是一个四元组,用来标识源端口、源IP、目标端口、目标IP。
在我们应用层编程的时候,发送数据的时候,只需要调用send(socket,buf,sizeof(buf),0),不需要每次填写源端口、源IP、目标端口、目标IP。就可以把数据从应用层传到传输层进行数据封装。这样就减少层次之间数据传递。应用层只需要传要传输的数据。到传输层后,会根据socket添加对应的端口信息,到网络层,会再根据socket添加对应的ip。