一:TCP/IP网络层
二:各层小谈
2.1:运用层
运用层主要运用socket编程来实现对网络数据的传输:
服务器 客户端
socket() socket() //创建socket
bind()//绑定服务器的IP地址与端口 connect() //连接服务器
listen()//打开监听功能 while(1){
while(1){ io-ops}
accept();//等待client的连接,这个阻塞式等待 close()
io-ops
}
close()
2.2:传输层(TCP/UDP层)
1:tcp
tcp是面向连接的,可靠的,以字节流传输的网络数据方式,在listen()时就完成了3次握手
所谓的三次握手,不必拘束与发送syn这些信号啥的,我们可以形象的比喻为服务器与客户端的读写端口的检查
第一次:客户端发送SYN数据
第二次:服务器回复ACK //当服务器接收到数据后,服务器知道自己的RX->OK ,同时服务器知道客户端的TX->OK.
第三次:客户端回复FIN //当服务器接收到后,服务器知道自己的TX->OK 同时客户端知道自己的TX(在第一次握手)->OK,并且接收到服务器的数据说明客户端的RX->OK
断开是否的四次挥手:
第一次:客户端发送EOF给服务器 -> 发给老哥(服务器),我要下线了,断开客户端的发送功能
第二次:服务器回复ACK给客户端 -> 发给小老弟(客户端),我收到你下线的消息了
第三次:服务器发送EOF给客户端 -> 发给小老弟(客户端),我已经把你的足迹都给释放了
第四次:客户端回复ACK给服务器 ->发给老哥(服务器),好的,老哥,我撤了。
2:udp
udp是无面向连接的,非可靠的以包方式传输的网络数据方式。没有什么三次友好握手和四次挥泪拜拜的说法:
注意:TCP传输中,read与write传输没有大小限制,他们都有各自的数据缓冲区,如果任何一方满了,另外一方都会被阻塞。
UDP传输中,任何一方满了新的数据将会被丢弃。
2.3:网络层(IP层)
IP层主要负责路由路径选择,它一次只能发送一包数据。