TCP/IP协议要是看书,我估计没几个看的下去,大学时学到就是一本厚厚的书,里面的内容也是枯燥乏味,然后呢我们老师讲的吧也不生动,这就导致了班上也没几个人听。讲了啥,我差不多都忘了。我当初学的时候还没意识到网络编程的重要性,后来也是慢慢接触编程才发现,客户端与服务器端通信都要建立连接,才能进行数据传输。
讲真现在百度的东西都是相互借鉴,看起来都差不多,有的解析跟教科书式的答案,而有的呢是通过漫画来为你说明,说的就比较生动形象了,下面我就来谈谈TCP/IP协议握手和挥手。
- TCP/IP协议三次握手
第一次握手:A给B打电话,A问B你听得到吗?
第二次握手:B接收到A的信息,回答A我听得到,你呢?
第三次握手:A接收到B的信息,A说听得到
第一次握手说明A发消息的能力是没有问题的,第二次握手说明了B发消息和接受消息的能力都没有问题, 第三次握手A接收到B的消息,说明A接收消息也没有问题。三次握手保证了双方输入输出都是没有问题的,客户端与服务器端就可以进行数据传输了。
TCP的特点:面向连接的,可靠的传输协议
为什么不需要四次握手?
四次握手就是在三次的基础之上,A对B说:“我接受到你的消息了,你能接收到我的消息吗?”如果有四次握手的话就多余了,因为一开始A就给B发过消息了。
四次握手多余,那两次握手又显得太少了,为什么呢?
- 客户端给服务器端发消息,服务器端知道客户端可以发消息但是因为没有第三次握手,所以服务器不知道客户端是否具有接收消息的能力。客户端从服务器端接收到消息,说明服务器接收和发送消息都没得问题,虽然客户端确保了服务器接收和发送都没问题,但是服务器端却不知道客户端的接收是否没有问题。所以两次握手并不可靠。
- 当网络拥堵时二次握手也会出现问题。客户端与服务器端建立TCP连接,第一次发送的TCP连接请求发生了阻塞,导致服务器没接收到,接着客户端又发送了一次请求,第二次网络没有拥堵,服务器接收到了请求,两次握手的话,此时就建立了TCP连接,通信结束,连接断开。当网络不在堵塞时,第一次发送的请求到达服务器,又与客户端建立连接,但客户端以为第一次发送的请求已经丢失,不会对这个建立的连接进行通信,虽然服务器为客户端分配了资源,但是客户端并不进行数据传输,当堵塞的资源比较多时,一下子建立TCP连接,服务器端分配给客户端的资源也增多就导致了服务器资源的浪费。服务器过了很长时间都没有收到回复,于是也不会为客户端分配资源,这次连接就放弃了。
- 四次挥手
四次挥手就跟一对夫妻离婚一样,只有双方同意离婚了才能离,而不是,一个人想离就能离。
客户端想与服务器端断开连接,客户端的传输控制层向服务器端的传输控制层发送fin数据包,然后服务器端接收到fin数据包,再向客户端发送一个确认包ack,
此时服务器还需单独的发送一个fin数据包到客户端,客户端再发送ack确认包给服务器端。对象资源就销毁了,TCP的连接也就关闭了。
IP地址=网络号+主机
主机192.168.50.99
掩码255.255.255.0点与点之间代表一个bit,8个二进制位,全1时为255
网络号192.168.50.0 主机99
IP地址和掩码做二进制的按位与(0&1,两个都为1时才为1,其余为0)
下面我给你们推荐一本关于网络编程的书,《图解TCP/IP》,里面夹杂着许多图片来帮我们记忆,《码农翻身》也不错。