电脑网络知识(计算机网络基础知识入门)( 五 )


IP层接收下层(网络接口层如以太网设备驱动)发来的数据包 , 并将数据包发送到更高层——TCP或UDP层;相反 , IP层也将从TCP或UDP层接收的数据包传输到较低层 。IP数据包是不可靠的 , 因为IP没有做任何事情来确认数据包是按顺序发送的还是损坏的 。IP数据包包含发送它的主机的地址(源地址)和接收它的主机的地址(目的地址) 。
TCP是面向连接的通信协议 。连接是通过三次握手建立的 , 通信完成后应该拆除连接 。因为TCP是面向连接的 , 所以只能用于端到端的通信 。TCP提供可靠的数据流服务 , 采用“肯定应答加重传”技术实现传输的可靠性 。TCP还使用一种称为“滑动窗口”的方法来控制流量 。所谓的窗口 , 实际上是表示接收能力来限制发送方的发送速度 。
注:seq:“sequance”序号;Ack:“确认”确认号;SYN:“synchronize”请求同步标志;;ACK:“确认“确认标志”;芬:“终于”结束标志 。
TCP连接建立过程:首先客户端发送连接请求消息 , 服务器接受连接后回复ACK消息 , 并为这个连接分配资源 。客户端收到ACK消息后 , 也向服务器段发送ACK消息 , 并分配资源 , 从而建立TCP连接 。
TCP断开流程:假设客户端发起断开请求 , 即发送FIN消息 。服务器收到FIN消息后 , 表示“我在客户端没有任何数据发送给你” 。但是 , 如果你还有数据要发送 , 你也不必急着关闭套接字 , 你可以继续发送数据 。于是你先发送ACK , “告诉客户端我已经收到你的请求 , 但是我还没有准备好 , 请继续等我的消息” 。此时 , 客户端进入FIN_WAIT状态 , 继续等待来自服务器端的FIN消息 。当服务器确定数据已经发送完毕 , 就向客户端发送FIN消息 , “告诉客户端 , OK , 我的数据已经发送完毕 , 准备关闭连接” 。客户端收到FIN消息后 , 知道可以关闭连接 , 但还是不相信网络 , 怕服务器不知道关闭 , 于是发送ACK , 进入TIME_WAIT状态 。如果服务器没有收到ACK , 他可以重新传输它 。” , 服务器收到ACK后 , “就知道可以断开了” 。等待2MSL后 , 客户端仍然收不到回复 , 证明服务器正常关闭 。我的客户也可以关闭连接 。好了 , TCP连接关闭!
为什么摇三次?
在只有两次“握手”的情况下 , 假设客户端想和服务器建立连接 , 但是因为中途连接请求的数据报丢失 , 客户端不得不重新发送;此时 , 服务器只接收到一个连接请求 , 因此可以正常建立连接 。但有时客户端重发请求并不是因为数据报丢失 , 而是有可能因为网络并发量大 , 导致数据传输过程在某个节点受阻 。在这种情况下 , 服务器端的信息资源网络将连续接收两个请求 , 并保持等待两个客户端请求向他发送数据...这就是问题所在 。客户端实际上只有一个请求 , 但是服务器端有两个响应 。极端情况下 , 客户端可能会多次重发请求数据 , 导致服务器最终建立N次响应等待 , 从而造成资源的极大浪费!所以 , “三次握手”是必须的!
为什么要挥四次?
试想一下 , 如果你现在是一个客户端 , 想要断开与服务器的连接 , 该怎么办?第一步 , 自己停止向服务器发送数据 , 等待服务器的回复 。但这还没有结束 。虽然你自己不发送数据给服务器 , 但是因为你之前已经建立了平等的连接 , 他这个时候就有了发送数据给你的主动权 。因此 , 服务器不得不停止主动向您发送数据 , 并等待您的确认 。其实说白了就是保证双方一个合同的完全履行!
TCP使用的协议:FTP(文件传输协议)、Telnet(远程登录协议)、SMTP(简单邮件传输协议)、POP3(与用于接收邮件的SMTP相反)、HTTP协议等 。
回到顶端
Udp协议
用户数据报协议是一种无连接的通信协议 。UDP数据包括目的端口号和源端口号信息 。因为通信不需要连接 , 可以广播发送 。UDP通信不需要接收方确认 , 是一种不可靠的传输 , 可能会出现丢包 。在实际应用中 , 需要程序员进行编程和验证 。


推荐阅读