三次握手【三报文握手】
- A首先要向B发送建立连接的请求。
- B收到A的请求后,要告诉A自己已经收到了请求。
- A收到B的确认收到请求后,要告诉B,自己也已经收到了B确认无误的信息。
之所以这样做是因为TCP需要建立全双工通信,也就是要求双方都要确认自己和对方的发送和接收都正常。
- 第一次报文握手:A只是发送了报文,A既不知道B的发送和接收是否正常,也不知道自己的发送和接收是否正常。对于B而言,B知道了A发送正常,自己接收正常
- 第二次报文握手:A收到了B的确认报文,可知自己发送和接收正常,知道对方发送和接收也正常。但是B不知道自己的发送是否正常,也不知道对方的接收是否正常
- 第三次报文握手:B收到了A的确认确认收到报文。B可以确认自己的发送正常,对方的接收也正常。
四次挥手【四报文握手】
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
举个例子:A和B打电话,通话即将结束后,A说“我没啥要说的了”,B回答“我知道了”。但是B可能还会要说的话,A不能要求B跟着自己的节奏结束通话,于是B可能又巴拉巴拉说了一通,最后B说“我说完了”,A回答“知道了”,这样通话才算结束。
TCP和UDP
- TCP是面向连接的运输层协议。TCP提供全双工通信,能够保证通信的可靠性
- UDP在传送数据前不需要简历连接,其他端收到UDP报文后,也不需要给出任何确认。
流量控制
利用滑动窗口实现流量控制。发送方的发送窗口不能超过接收方给出的接收窗口值。比如说,A向B发送数据,在连接建立时,B告诉A,我的接收窗口receiver window(rwnd)=400。
拥塞控制
拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。TCP采用慢开始、拥塞避免、快重传和快恢复的四种拥塞控制算法。慢开始就是当主机开始发送时,由小到大主键增大拥塞窗口。每经过一个传输轮次,拥塞窗口就会加倍。而这种加倍不是无限的,存在一个慢开始门限阈值,达到这个阈值后就会启用拥塞避免算法。这个时候拥塞窗口就会按照线性规律缓慢增长。当收到超时信息的时候,会重新进入慢开始阶段,并将启用拥塞避免算法的阈值减半。但是有的时候,其实网络没有阻塞,只是个别报文段丢失了。那接收方就会启动快重传算法,不等待自己发送数据才捎带确认丢失,而是立刻对已收到的报文进行三次重复确认。这个时候,发送方就会立刻重传。发送方这个时候知道了不是网络堵塞,就不启动慢开始,而是执行快恢复的算法。跳过慢开始阶段,直接进入拥塞避免。
线程和进程的关系
进程是动态执行的程序。它包含了PCB块和相对应占有的资源。所以说进程是资源分配的最小单位。而进程里面可能会含有多个线程,线程可以共享进程的部分资源,也可以拥有自己的局部变量等。线程是CPU调度的最小单位。