网络编程
java后端中的网络编程, 很多时候并不需要自己编写底层代码。但是对于网络底层的原理,必须要足够了解。才能理解和学习后续更高阶的技术, 比如负载均衡。
网络编程的基础知识
通信协议分层模型
通信协议分层模型
通信协议分层模型
TCP 协议
TCP(Transmission Control Protocol,传输控制协议):是一种面向连接的
、可靠的
、基于字节流
的传输层的通信协议。
• 使用TCP协议前,须先建立TCP连接,形成传输数据通道。传输前,采用“三次握手”方式,是可靠的。
• TCP协议进行通信的两个应用进程:客户端、服务端
• 在连接中可进行大数据量的传输
• 传输完毕,需释放已建立的连接,效率低
• 类似于电话
UDP 协议
UDP(User Datagram Protocol,用户数据报协议):是一个无连接
的传输层协议、提供面向事务
的简单不可靠的信息传送服务。
• 将数据、源、目的封装成数据包,不需要建立连接
• 每个数据报的大小限制在64K内
• 因无需连接,故是不可靠的,数据可能丢失
• 发送数据结束时无需释放资源,速度快
• 类似于短信
IP协议
IP 是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。
(这样,IP 就降低了对网络线路的需求。每条线可以同时满足许多不同的计算机之间的通信需要)
通过 IP,消息(或者其他数据)被分割为小的独立的包,并通过因特网在计算机之间传送
。
IP 负责将每个包路由至它的目的地
。当一个 IP 包从一台计算机被发送,它会到达一个 IP 路由器。IP 路由器负责将这个包路由至它的目的地,直接地或者通过其他的路由器。在一个相同的通信中,一个包所经由的路径可能会和其他的包不同。而路由器负责根据通信量、网络中的错误或者其他参数来进行正确地寻址。
TCP/IP 意味着 TCP 和 IP 在一起协同工作
。
TCP 负责
应用软件(比如你的浏览器)和网络软件
之间的通信。
IP 负责
计算机之间
的通信。
TCP 负责将
数据分割
并装入 IP 包,然后在它们到达的时候重新组合它们。
IP 负责将包发送至接受者。
TCP连接的三次握手和四次挥手
TCP是面向连接的, 说的是TCP的连接的建立是需要通过三次握手的认证后才建立.而TCP连接一旦要端开, 还需要进行四次挥手.
我们需要想下TCP连接的建立, 为什么要经过三次握手?而不是两次?这三次握手是哪三次?而断开连接为什么要经过四次握手?这四次又是哪四次?具体底层是以什么体现?
三次握手
说到三次握手, 这里引用网络上的关于三次握手原因的类比.
第一次对话
老婆让甲出去打酱油,半路碰到一个朋友乙,甲问了一句:哥们你吃饭了么?
结果乙带着耳机听歌呢,根本没听到,没反应。甲心里想:跟你说话也没个音,不跟你说了,沟通失败。说明乙接受不到甲传过来的信息的情况下沟通肯定是失败的。
如果乙听到了甲说的话,那么第一次对话成功,接下来进行第二次对话。
第二次对话
乙听到了甲说的话,但是他是老外,中文不好,不知道甲说的啥意思也不知道怎样回答,于是随便回答了一句学过的中文 :我去厕所了。甲一听立刻笑喷了,“去厕所吃饭”?道不同不相为谋,离你远点吧,沟通失败。说明乙无法做出正确应答的情况下沟通失败。
如果乙听到了甲的话,做出了正确的应答,并且还进行了反问:我吃饭了,你呢?那么第二次握手成功。
通过前两次对话证明了乙能够听懂甲说的话,并且能做出正确的应答。 接下来进行第三次对话。
第三次对话
甲刚和乙打了个招呼,突然老婆喊他,“你个死鬼,打个酱油咋这么半天,看我回家咋收拾你”,甲是个妻管严,听完吓得二话不说就跑回家了,把乙自己晾那了。乙心想:这什么人啊,得,我也回家吧,沟通失败。说明甲无法做出应答的情况下沟通失败。
如果甲也做出了正确的应答:我也吃了。那么第三次对话成功,两人已经建立起了顺畅的沟通渠道,接下来开始持续的聊天。
通过第二次和第三次的对话证明了甲能够听懂乙说的话,并且能做出正确的应答。
可见,两个人进行有效的语言沟通,这三次对话的过程是必须的。
为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。
这个例子举得挺好的。不过个人感觉为什么是三次而不是二次,不是因为为了证明甲能听懂乙并回应(第二次乙能正确的响应甲说明俩人之间沟通已无障碍了),而是怕出现以下情况而浪费感情。这个情景是这样的(例子有点不实际意会就好):甲在路上跟乙打招呼,由于刮风什么的这句活被吹跑了,然后甲又跟打了个招呼,乙听到了并作出了回应。此时不管是三次握手还是两次握手两个人都能愉快的沟通。0.1秒后俩人四次挥手告别了。此时被风刮跑的那句话又传到了乙的耳朵里,乙认为甲又要跟他沟通,所以做出了响应的回应。(问题出现了)假如采用2次握手,乙就认定了甲要跟他沟通,于是就不停的等,浪费感情。可如果是采用3次握手,乙等了一会后发现甲没有回应他就认为甲走了然后自己也就走了!
这就很明白了,其实第三步是防止了乙的一直等待而浪费自己的时间,而不是为了保证甲能够正确回应乙的信息
三次握手总结
三次握手原因
为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手
为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手.
第三步是防止了乙的一直等待而浪费自己的时间,而不是为了保证甲能够正确回应乙的信息**
三次握手协议细节
三次握手协议细节
作者:sixleaves
链接:https://www.jianshu.com/p/b5d4e374faaf
共同学习,写下你的评论
评论加载中...
作者其他优质文章