TCP协议笔记

1 TCP 三次握手、四次挥手

1.1 三次握手

client:  CLOSE->SYN_SEND->ESTABLISHED

server:  LISTEN->SYN_RECV->ESTABLISHED

客户端发送连接请求,发送SYNC,状态变为SYN_SEND;如果服务器端接收到SYN报文,状态变为SYN_RECV,同时服务器端发送ACK+SYN报文;如果客户端收到ACK+SYN报文,则继续发送ACK确认报文,此时客户端变为ESTABLISHED状态;如果服务器端收到ACK报文,服务器端也变为ESTABLISHED状态。

1.2 四次挥手

client:  FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT

server:  CLOSE_WAIT->LAST_ACK->CLOSED

客户端关闭连接,发送FIN报文给服务器,状态变为FIN_WAIT_1,此时客户端停止发送数据,但仍能接收服务器端发送过来的数据;服务器端收到FIN,停止发送数据,回复客户端ACK报文,此时状态改为CLOSE_WAIT状态; 服务器端关闭连接,发送FIN报文给客户端,此时状态变为LAST_ACK;如果客户端收到服务器端的FIN报文,则客户端发送ACK确认报文,并且进入TIME_WAIT状态;如果服务器收到客户端的ACK报文,则进入CLOSED状态; 在TIME_WAIT期间,如果客户端没有再收到服务端的FIN报文(也即ACK报文没有丢失),则客户端也进入CLOSED状态。

2 拥塞控制

2.1 慢开始,拥塞控制

拥塞窗口、ssthresh关系

当cwnd<ssthresh时,使用慢开始算法(指数增长)。

当cwnd>ssthresh时,改用拥塞避免算法(线性增长)

当cwnd=ssthresh时,慢开始与拥塞避免算法任意;

本来遇到网络拥塞时,也即网络丢包;ssthresh设置为网络拥塞时cwnd值的一半,cwnd此时 重新为1开始发送;周而复始。

2.2 快重传,快恢复

快重传配合使用的还有快恢复算法,有以下两个要点:

①当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半。但是接下去并不执行慢开始算法。

②考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。如下图:

时间: 2024-10-06 00:49:16

TCP协议笔记的相关文章

tcp ip协议笔记(1)——简介

前言 本人记性不佳,看书健忘,以此笔记来记录看书后自己所知所想,已达到加深对tcp ip的理解,本笔记仅仅是我看完书后自己所写的总结,权当是书后复习. 一.为什么会有tcp ip协议 我们知道中国有56个民族,各个民族有各自的语言,语言就形成了各个民族的障碍,大家都说自己的语言,谁也听不懂对方在讲什么,语言是各个民族之间那道鸿沟,谁也跨不过,照成每个民族都是一个小团体,民族之间不能协同合作成为一个大团体.普通话就解决了这个问题,在民族之间那道鸿沟上建立了一道桥梁,让民族之间可以交流,避免了不

tcp ip协议笔记(1)——简单介绍

??前言 本人记性不佳,看书健忘,以此笔记来记录看书后自己所知所想,已达到加深对tcp ip的理解.本笔记不过我看完书后自己所写的总结,权当是书后复习. 一.为什么会有tcp ip协议 我们知道中国有56个民族.各个民族有各自的语言,语言就形成了各个民族的障碍.大家都说自己的语言,谁也听不懂对方在讲什么,语言是各个民族之间那道鸿沟,谁也跨只是,照成每一个民族都是一个小团体,民族之间不能协同合作成为一个大团体. 普通话就攻克了这个问题,在民族之间那道鸿沟上建立了一道桥梁,让民族之间能够交流,避免了

TCP/IP详解学习笔记(9)-TCP协议概述

终于看到了TCP协议,这是TCP/IP详解里面最重要也是最精彩的部分,要花大力气来读.前面的TFTP和BOOTP都是一些简单的协议,就不写笔记了,写起来也没啥东西. TCP和UDP处在同一层---运输层,但是TCP和UDP最不同的地方是,TCP提供了一种可靠的数据传输服务,TCP是面向连接的,也就是说,利用TCP通信的两台主机首先要经历一个"拨打电话"的过程,等到通信准备结束才开始传输数据,最后结束通话.所以TCP要比UDP可靠的多,UDP是把数据直接发出去,而不管对方是不是在收信,就

Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据

1. TCP协议发送数据 和 接收数据 TCP协议接收数据:• 创建接收端的Socket对象• 监听客户端连接.返回一个对应的Socket对象• 获取输入流,读取数据显示在控制台• 释放资源 TCP协议发送数据: • 创建发送端的Socket对象• 这一步如果成功,就说明连接已经建立成功了.• 获取输出流,写数据• 释放资源 2. 代码实现: (1)发送端: 1 package cn.itcast_06; 2 3 import java.io.IOException; 4 import java

TCP协议学习笔记(一)首部以及TCP的三次握手连接四次挥手断开

TCP协议是一种面向连接的.可靠的流协议. 流即不间断的数据结构.这样能够保证接收到数据顺序与发送相同.但是犹如数据间没有间隔,因此在TCP通信中,发送端应用可以在自己所要发送的消息中设置一个标示长度或间隔的字段信息. 由于TCP为应用提供可靠传输,所以需要对数据传输时数据破坏.丢包.重复以及乱序问题有充分的控制能力.同时TCP协议作为面向连接的协议,只有确认对端存在才会发送数据. TCP通过检验和.序列号.确认应答.重发控制.连接管理.窗口控制等实现可靠传输. 当传输层采用TCP协议进行通信时

Java基础知识强化之网络编程笔记13:TCP之TCP协议上传图片并给出反馈

1. TCP协议上传图片并给出反馈: (1)客户端: 1 package cn.itcast_13; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.FileInputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.net.Socket;

学习笔记——网络编程3(基于TCP协议的网络编程)

TCP协议基础 IP协议是Internet上使用的一个关键协议,它的全称是Internet Protocol,即Internet协议,通常简称IP协议. 使用ServerSocket创建TCP服务器 在两个通信实体没有建立虚拟链路之前,必须有一个通信实体先做出“主动姿态”,主动接收来自其他通信实体的连接请求. Java中能接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端Socket连接,如果没有连接,它将一直处于等待状态. ServerSoc

基于TCP协议的简单Socket通信笔记(JAVA)

好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. 1.首先先来看下基于TCP协议Socket服务端和客户端的通信模型: Socket通信步骤:(简单分为4步) 1.建立服务端ServerSocket和客户端Socket 2.打开连接到Socket的输出输入流 3.按照协议进行读写操作 4.关闭相对应的资源 2.相关联的API: 1.首先先来看下S

C#网络编程之---TCP协议的同步通信(二)

上一篇学习日记C#网络编程之--TCP协议(一)中以服务端接受客户端的请求连接结尾既然服务端已经与客户端建立了连接,那么沟通通道已经打通,载满数据的小火车就可以彼此传送和接收了.现在让我们来看看数据的传送与接收 先把服务端与客户端的连接代码敲出来 服务端 IPAddress ip = new IPAddress(new byte[] { 127, 1, 1, 1 }); TcpListener server = new TcpListener(ip, 8005); server.Start();