计算机网络笔记

TCP有连接可靠服务

TCP特点

1.TCP是面向连接的传输层协议;

2.每条TCP连接只能有两个端点,每条TCP连接是一对一的;

3.TCP提供可靠交付,保证传送数据无差错,不丢失,不重复且有序;

4.TCP提供全双工信道,允许通信双方同时发送数据。TCP两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据;

发送缓存存放的数据:1.发送应用程序传给发送方TCP准备发送的数据。2.TCP已发送但未收到确认的数据。

接收缓存存放的数据:1.按序到达但尚未被接受应用程序读取的数据。2.不按序到达的数据。

5.TCP是面向字节流的,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅视为一串无结构的字节流。(这会导致粘包问题)UDP报文长度由发送应用进程决定,TCP报文的长度需要根据接收方给出的窗口值和网络拥塞程度来决定。如果进程传送到TCP缓存的数据块太长,TCP会把它划分得短一些传送,如果太短则积足够多得字节再组成报文段发出去。

TCP连接的端口为套接字,由IP和端口号组成,套接字唯一的标识网络中的一台主机和其上的一个应用(进程)。每条TCP连接唯一的被通信的两个端口确定。

三次握手

1.客户机向服务器发送请求连接报文段,报文段中同步位SYN置1,同时包含一个初始序号seq=x,客户端进入同步已发送(SYN-SENT)状态。

2.服务器收到客户端的请求连接报文,回复一个确认报文。报文中确认位ACK、同步位SYN都置1,并包含一个初始序号seq=y和确认号ack=x+1,服务器进入同步收到(SYN-RCVD)状态。

3.客户端收到服务器的确认之后再向服务器发送一个确认报文,报文中确认位ACK置1,序号为seq=x+1,确认号ack=y+1,客户进程进入已建立连接(ESTABLISHED)状态。

四次挥手

1.客户机发送释放链接报文段,并停止发送数据,主动关闭TCP连接。报文段中终止位FIN置1,序号seq=u为上一个发送序号+1,客户机进入终止等待1(FIN-WAIT_1)状态。

2.服务器收到报文段后回复一个确认报文段。报文段中确认位ACK置1,确认号ack=u+1,序号seq=v为前一个序号加一,服务器进入关闭等待状态(CLOSE-WAIT)。

3.当服务器没有要向客户机发送的数据时,通知TCP释放链接。发送释放连接报文段。报文段中终止位FIN确认位ACK都置1,确认号ack=u+1,序号seq=w(可能在这之前服务器还发送过一些数据),服务器进入最后确认状态(LAST-ACK)。

4.客户机收到报文,回复一个确认报文段。报文段中确认位ACK置1,确认号ack=w+1,序号seq=u+1。客户机等待2MSL(最长报文段寿命)后进入连接关闭状态(CLOSED)。

UDP无连接非可靠服务

UDP特点

1.无需建立连接,没有建立连接时延;

2.无连接状态,因为是无连接,因此不必维护连接状态(接收缓存发送缓存拥塞控制和确认之类的);

3.分组首部开销更小(UDP首部只有8B,而TCP有20B);

4.应用层能更好的控制发送的数据和发送时间。(没有拥塞控制不会受网络拥塞影响);

5.UDP支持一对一,一对多,多对多的交互通信,而TCP只支持一对一通信;

UDP常用于一次性传送较少数据的网络应用,如DNS,SNMP,也常用于多媒体应用,如IP电话,视屏会议,流媒体等。因为时延小。

UDP不保证可靠交互,但可由用户在应用层来完成可靠交互(可以在应用层实现类似TCP可靠交互的机制(确认,重传,数据有序))

UDP是面向报文,UDP对应用层交下来的报文既不合并,也不拆分,而是保留报文的边界,一次交付一个完整的报文(报文在UDP中是不可分割的,报文是UDP数据报处理的最小单位)。(但UDP交付给IP层(网络层)后可能会被分片)

相关推荐
非概念16 分钟前
stm32学习笔记----51单片机和stm32单片机的区别
笔记·stm32·单片机·学习·51单片机
青椒大仙KI113 小时前
24/11/13 算法笔记<强化学习> DQN算法
笔记·算法
Michael_Good3 小时前
【计算机网络】设备如何监听 ARP 请求广播
计算机网络
promise-render3 小时前
npm、yarn、pnpm 切换查看镜像源笔记
前端·笔记·npm
夜流冰3 小时前
知识见闻 - 苹果手机拨号键长按
笔记
IT19959 小时前
Linux笔记-对Linux环境变量的进一步认识(2024-08-09)
linux·运维·笔记·运维开发
TeYiToKu13 小时前
笔记整理—linux驱动开发部分(8)framebuffer类设备
linux·驱动开发·笔记·嵌入式硬件·arm
陈奕迅本讯14 小时前
数据结构-归并排序笔记
数据结构·笔记
猫爪笔记15 小时前
MySQL数据库: 初始MySQL +Navicat (学习笔记)
数据库·笔记·mysql·navicat
sealaugh3215 小时前
aws(学习笔记第十二课) 使用AWS的RDS-MySQL
笔记·学习·aws