基础知识大全 知识( 五 )


TCP连接和断开过程:假设客户端发起暂停连接的请求 , 即发送FIN消息 。服务器收到FIN消息后 , 表示“我的客户端没有数据要发送给你”但是 , 如果你还有数据要发送 , 你也不用急着关闭Socket , 可以继续发送数据 。所以你先发ACK , “告诉客户端我收到了你的请求 , 但是我还没准备好 。请继续等我的信息” 。此时 , 客户端进入FIN_WAIT状态 , 继续等待来自服务器端的FIN消息 。当服务器确认数据已经发送时 , 它向客户端发送FIN消息 。“告诉客户端 , 好了 , 我的数据已经发送了 , 我准备关闭连接了” 。客户端收到FIN消息后 , “他知道可以关闭连接 , 但还是不信任  , 怕服务器端不知道关闭 , 所以发送ACK落在了TIME_WAIT的情况下 , 如果服务器端没有收到ACK , 就可以重传 。” , 服务器收到ACK后 , “你知道你可以断开连接了” 。客户端在等待2MSL后仍然没有收到回复 , 证明服务器已经正常关闭 。我的客户也可以关闭连接 。好了 , TCP连接是这样关闭的!
为什么摇三次?
在只有两次“握手”的情况下 , 假设客户端想要连接服务器 , 但是因为中途连接所需的数据被报丢失 , 客户端不得不重新发送;此时 , 服务器只接收到一个连接请求 , 因此可以正常建立连接 。但有时客户端重发请求并不是因为数据报失 , 而是因为 并发量大导致数据传输过程在某个节点受阻 。在这种情况下 , 服务器端将连续接收两个请求 , 并持续期待两个客户端向他发送数据...这就是问题所在 。客户端实际上只有一个请求 , 但是服务器端有两个响应 。极端情况下 , 客户端可能会多次重发所需数据 , 导致服务器最终在预期中设置了N个响应 , 从而造成极大的资源浪费!所以 , “三次握手”是必须的!
为什么要挥四次?
试想一下 , 如果你现在是一个客户端 , 想要断开与服务器的连接 , 该怎么办?之一步 , 停止向服务器发送数据 , 并等待服务器的回复 。但这还没有结束 。虽然不是你自己给服务器发送数据 , 但是因为你之前已经建立了平等的连接 , 所以这个时候他有权利自动给你发送数据 。所以服务器端红豆博客不得不自动停止向你发送数据 , 期待你的确认 。其实说白了就是保证双方一个合同的全面履行!
TCP的应用协议:FTP(文件传输协议)、Telnet(远程登录协议)、 TP(短邮件传输协议)、POP3(相对于 TP , 用于吸收邮件)、HTTP协议等 。
8.UDP协议
用户数据报协议是面向无连接的通信协议 。UDP数据包含目标端口号和源端口号的信息 。因为通信不需要连接 , 可以广播发送 。UDP通信不需要接收方确认 , 是一种不可靠的传输 , 可能会出现丢包 。在实际应用中 , 需要程序员编程验证 。
UDP和TCP在同一层 , 但它不关心包的顺序、缺陷或重传 。因此 , UDP不适用于那些应用虚电路并连接到洪都博客的服务 。UDP对于那些面向查询-响应的服务很重要 , 比如NFS 。与FTP或Telnet相比 , 这些服务需要交换的信息更少 。
每个UDP消息分为两部分:UDP头和UDP数据区 。报头由四个16位(2字节)字段组成 , 分别解释报文的源端口、目的端口、报文长度和校验值 。UDP报头由4个域组成 , 每个域占用2个字节 , 如下所示:
(1)源端口号;
(2)目的端口号;
(3)数据报的长度;
(4)检查值 。
UDP协议包括TFTP(缩写文件传输协议)、SNMP(缩写 管理协议)、DNS(域名解析协议)、NFS和BOOTP 。
TCP和UDP的区别:TCP是一种可靠的用于汇聚的字节流服务;UDP是一种无连接且不可靠的数据报服务 。

9.DNS协议
DNS是DomainNameSystem的缩写 , 用于在从组织到域的层次结构中命名计算机和 服务 。可以简单理解为将URL转换为IP地址 。域名由一串用点分隔的单词或缩写组成 。每个域名对应一个唯一的IP地址 , 在互联网上域名和IP地址是一一对应的 。DNS是域名解析的服务器 。DNS在TCP/IP (如Internet)中使用 , 通过用户友好的名称来查找计算机和服务 。