今天看到《看透SpringMVC源代码分析与实践》的相关协议与标准中看到计算机网络相关知识,现在整理下自己的理解;
参考博客(有更详细内容):https://www.jianshu.com/p/9968b16b607e
https://github.com/jawil/blog/issues/14
DNS协议
DNS属于应用层协议,他提供将易于理解的主机名或域名转换成计算机网络能识别的数字地址的机制,使我们不用记住复杂的数字地址访问网址!
在windows中我们可以通过nslookup
命令查看DNS的解析信息:
这里显示的是我们使用nslookup命令查看解析百度网址的信息,由图可知,DNS服务器的名称是UnKnow(未知)IP地址是192.168.1.1,而www.baidu.com的ip地址是119.75.216.20、119.75.213.61,它是使用CNAME方式解析的,原始设置的域名为:www.a.shifen.com。
TCP/IP协议与socket
TCP(Transmission Control Protocol)是运行在运输层上的协议,负责具体的传输工作;而IP协议运行在网络层,主要进行IP(Internet Protocol)地址的查找工作。书上运用快递的例子描写两者的功能:
识别包裹上填写的地址并根据内容找到客户,属于IP协议的工作,发货运输到客户手里是TCP协议的工作!
三次握手 四次挥手
TCP传输协议是有连接的传输协议,必须经过三次握手使客户端和服务器端成功连接才会传输数据,最后断开时经过四次挥手断开连接!在这个过程中的相关概念及其含义如下表所示:
协议名 | 含义 |
---|---|
seq | sequence number 的缩写,表示的是传输数据的序号,TCP传输的每个字节都有相应的序号,接受端会根据序号判断是否有数据丢失,如果有则请求重发,这样就保证了数据的完整性 |
ack | acknowlegment number的缩写,表示的是接受数据后反馈的成功信息,它的值是当前接受数据的序号+1,表示的是下一个想要接受数据的信号 |
ACK | 当ACK的值为1的时候ack才能起作用,第一次发送请求的时候ACK的值为0,因为第一次没有数据的接受,ack没有值,所以ACK被设置成0 |
SYN | 表示同步位,连接的一开始是没有数据传输的,所以ack是没有值的,我们传输这样一个位的目的就是当其值为1时,直接设置ack的值为seq+1。需要注意的是,SYN会在前两次的值为1,因为两边的ack的值都需要初始化! |
FIN | 终止位,请求端发送这个请求希望断开连接 |
断开
流程解析
- 客户发送连接请求,SYN=1、seq=x,ACK=0(因为之前没有数据传输,ack也就没有值)
- 接受到序号为x的数据,服务器返回序号为seq=y的数据,此时因为SYN=1,所以ack就是就直接等于接受到数据序号seq+1 即x + 1,ACK=1使ack起作用!
- 第三次握手与第二次同理!
- 然后就是数据传输了
- 客户发送请求FIN=1断开连接,发送数据序号为seq=u
- 服务器接收后返回ACK=1,所以ack=u+1,因为ack在连接时已经初始化完成,所以这里也就没有SYN信息。
- 后面两步是服务器发送断开请求,和前两步同理!
TIME-WAIT的作用:
在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。
关于socket
TCP/IP只不过是协议而不是可以实现功能的工具,而Socket是TCP/IP协议的一个具体的实现。Socket在后面博客中再详细讲!
就先写到这吧,后面再补充!
网友评论