计算机网络(一)
先讲一讲我理解的TCP/IP
TCP/IP协议族在计算机网络的世界中占着很大的份额,在我们的使用过程,使用浏览器基本大都会使用到tcp协议和ip协议
tcp作为运输层协议,ip为网络层协议
无论是osi七层模型还是tcp/ip五层模型,tcp协议和ip协议都是重要的组成部分
与TCP/IP结缘之路
最早接触tcp/ip协议已无从考究,最早也只会简单的查看下自己的网络是否畅通,并无系统的学习,系统的学习应该是实习阶段,那时候接触到tcp/ip协议卷一这本书,厚到令人唏嘘。
毕业后的第一份工作来到了杭州的一个小厂,美其名曰业内排名第几第几,其实友商都不愿与我们比较,手动狗头。
但小厂虽小,却五脏俱全,身边同事也都为校招新人,也都是一边学习一边工作着,很幸运的接手了第一个项目就是与计网相关联比较大的,而我所负责的部分主要有两块,通信和前端。
与websockt不期而遇
在这先感谢下C工,作为导师兼组长,给我的成长起到不可或缺的作用,与外部通信我们采用的是较新的websocket,支持高并发,长连接,服务端主动推告警,完美适配我们的需求。
那时候哪里知道websocket,有时不决问度娘,不会,学起来。
tcp三次握手,四次挥手,长连接短链接,http1.0/1.1/2.0,websocket,这样就一篇篇的博客看了而下来。
提问,tcp为什么需要三次握手?
前端迷途
我现在从事的工作每天依然要和web打各种交道,但我已经不写前端了,怀念当初前后端一起写的时光,虽然短暂,但收获良多。
jquery虽老,尚能饭否。
TCP学习之路总结
1.tcp为什么三次握手而不是两次或是四次?
两次不能确定对端是否有收发能力,四次没必要浪费资源
2.tcp握手的目的?
确认双发是否有收发能力,确定序号,协商窗口大小
3.tcp报文格式
![在这里插入图片描述](https://img-blog.csdnimg.cn/07810ae3a0a7460f90b7e2febb4e8d70.png#pic_center)
源端口目的端口各16比特,用来标识同一台计算机的不同应用进程;
序列号确认号32比特,可靠传输中用来确认报文已接收
tcp首部长度4比特 TCP报文段的数据起始处 距离 TCP报文的起始处有多远
保留6比特
标志位(URG、ACK、PSH、RST、SYN、FIN。6比特):
一共六个,从左至右分别是URG、ACK、PSH、RST、SYN、FIN
URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。
ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
窗口16比特 最大65536 告诉对方本端的 TCP 接收缓冲区还能容纳多少字节的数据
校验和16比特 CRC 算法检验首部和数据正不正确
紧急指针 16比特 仅在 __URG __= 1 时才有意义,它指出本报文段中的紧急数据的字节数
4.tcp和udp的区别?
tcp面向连接,可靠,字节流的报文传输。udp无连接,不可靠,数据报传输。
连接:三次握手四次挥手
可靠:超时重传,拥塞控制,校验和,序列号,确认应答,连接管理,流量控制
传输:tcp中linux内核把小的数据合并发送,发送端粘包
接收端未及时读取数据,接收端粘包
fctl设置宏,取消算法,应用层添加分隔符,指明每次消息长度,固定长度发送。
5.超时会一直重传下去吗?
lnux内核中控制重传次数,重传定时器每隔15s,40s,75s后重传,三次重传仍未收到断开连接。可通过设置
6.tcp中有哪些定时器?
重传定时器,坚持定时器