首先,提一个问题,都知道OSI或,TCP/IP网络模型吧,采用最多的是五层模型,不用多说,其中数据从最高的应用层到最低的物理层,依次经过,
应用层 —> 传输层 —> 网络层 –> 数据链路层 —> 物理层;
每经过一层都会附加上头部或,尾部信息,比如,在传输层,如果采用的是TCP协议,则会添加上TCP报头,在网络层,会被加上IP报头,那么问题来了,是谁加的呢?
是协议栈,协议栈可以屏蔽掉各个厂家之间的差异,让上层感觉不到差别。由操作系统维护,操作系统叫各种协议封装好,然后提供socket给进程用来通信使用。
比如,在server端,系统会启动一个守护进程并在一个端口持续监听,比如http的80端口,ftp的21端口;
而对于client端,系统会随机分配一个端口,一般是10000以上,用于socket通信。
如何通信呢?
Client向server端发送SYNC请求,server端收到请求后,就知道了client端的端口了,后发送回给client端ACK,现在client端知道了server端有进程在监听,可以正常连接,再次发送ACK,此时,连接建立,这就是TCP的三次握手。