浅谈"网络传输层"

应用层
一个应用层协议都是为了解决某一类应用问题,而问题的解决又必须通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。
应用层负责的内容:
(1)应用进程交换的报文类型,如请求报文和相应报文
(2)各种报文类型的语法,如报文中的各个字段以及详细描述
(3)字段的语义,即包含在字段中的信息含义
(4)进程何时,如何发送报文,以及对报文相应的规则
两个重要的概念:序列化与反序列化
序列化是指将结构化的数据变为可以用来发送的字符串风格的数据
反序列化是指把从网络中拿出来的消息转化成结构化的数据
序列化与反序列化用的插件:XML,Jison
HTTP协议
常用的HTTP协议:HTTP(超文本传输协议),FTD,DNS,SSH
平时我们所说的网址就叫做URL,如下是一个URL的基本信息
这里写图片描述
HTTP协议格式
HTTP请求:
总共分为四个部分:首行:[方法]+[url]+[版本]
Header:请求的属性,冒号分割符的键值对,每组属性之间使用\n分割,遇到空行标识Header部分结束,
Body:空行后面的内容都是Body,Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度
HTTP相应:
首行:[版本号]+[状态码]+[状态码解释]
Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分割,
Body:空行后面的内容都是Body,Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度,如果服务器返回了一个html页面内容就在Body中。
HTTP常用的方法有两种:分别是GET和POST
HTTP的状态码
这里写图片描述
重定向分为临时重定向和永久重定向
临时重定向:第一次请求时要进行跳转
永久重定向:第二次请求时直接跳转到需要访问的地方
最常见的状态码:200(OK),404(Not Found),403(Forbidden),302(Redirect,重定向),504(Bad Gateway)
传输层
在TCP/IP协议中,用”源IP”,”目的IP”,”源端口号”,”目的端口号”和“协议号”这样的五元组来标识一个通信,这里的协议号标识使用的是传输层的哪个协议
端口号的划分范围:
0-1023:知名端口号
1024-15535:操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范围分配的
常见的一些知名端口号:
ssh服务器:22号端口号
ftp服务器:21号端口号
telnet服务器:23号端口号
http服务器:80号端口号
https服务器:443号端口号

查看知名端口号:cat /etc/services
netstat -n  //拒绝显示别名,能显示成数字的全部转化成数字
netstat -l  //仅列出有在监听的服务状态
netstat -p  //显示建立相关连接的程序名
netstat -t  //仅显示tcp相关选项
netstat -u  //仅显示udp相关选项
netstat -a  //显示所有选项,默认不显示listen相关
pidof [进程名]  //通过进程名查看进程ID

认识UDP
UDP是无连接的,,即在发送之前不需要建立连接,当然发送结束时也不需要释放连接,因此减少了开销和发送数据之前的时延。
UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表
UDP是面向报文的,UDP对应用层交下来的报文既不合并,也不拆分,而是保留这些报文的边界,即一次发送一个报文,UDP原样发送,既不会拆分,也不会分离
UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低
UDP支持一对一,一对多,多对一,多对多的交互通信
UDP的首部开销小,只有八个字节,比TCP的20个字节的首部要短
UDP的首部格式:
用户数据报UDP有两个字段,数据字段和首部字段
首部字段由四个字段组成:
源端口:在需要对方回信时选用,不需要时可用全0
目的端口:在终点交付报文时必须要使用到
长度:UDP用户数据报的长度,其最小值是8(仅有首部)
检验和:检验UDP用户数据报在传输中是否有错,有错就丢弃
UDP报文段的首部格式:
这里写图片描述
当运输层从IP层收到UDP的数据报时,就根据UDP首部中的目的,把UDP数据报根据相应的端口上交最后的终点
使用定长报头,可以进行报头与有效载荷的分离
UDP的缓冲区
UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,由内核将数据交给网络层协议进行后续的传输动作
UDP具有接受缓冲区,但这个接受缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致,如果缓冲区满了,再到达的UDP数据就会被丢弃。
发送的数据超过了UDP的最大长度,就要在应用层手动进行分包,多次发送,并在接收端手动拼装
UDP的socket既能读,也能写,全双工
基于UDP的应用层协议
NFS:网络文件系统
TFTP:简单文件传输协议
DHCP:动态主机配置协议
BOOTP:启动协议
DNS:域名解析协议
认识TCP
TCP是TCP/IP体系中非常复杂的一个协议
TCP的主要特点:
TCP是面向连接的传输层协议,应用程序在使用TCP之前,必须先建立TCP连接,在数据传送完毕后需要释放已经建立的TCP连接
每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
TCP提供可靠传输,,通过TCP连接传送的数据,无差错,不丢失,不重复,并且按序到达
TCP提供全双工通信,TCP允许发送双方的应用进程在任何时候都可以发送数据,TCP的两端都设有发送缓冲区和接受缓冲区,用来临时存放接收到的数据,彼此将数据发送到缓冲区之后,就可以做自己的事情了。
面向字节流,TC任意字节P的发送方可以以任意字节发送数据,接受方可以以任意字节拿走收据
UDP报文段的首部格式
这里写图片描述
源端口号和目的端口号:各占两个字节,分别写入源端口号和目的端口号
序号:占4个字节,值的是本报文段的数据的第一个字节的序号
确认号:占四个字节,是期望收到对方下一个报文段的第一个数据字节的序号,确认号为N,表明N-1为止的所有数据都已经正确接受
数据偏移:占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远,数据偏移的最大值是60字节,这也是TCP首部的最大长度,(选项的长度不能超过40字节)
保留:占6位,保留为今后使用,目前应该置为0
紧急URG:当URG=1时,表明紧急指针字段有效,它告诉系统,报文段中有紧急数据应该尽快传送,而不要按照原来的顺序传送
确认ACK:当ACK=1时,确认信号字段才有效,当ACK=0时,确认信号字段无效
推送PSH:发送方TCP将PSH置为1,对方就可以立即收到数据
复位RST:当RST=1时,表明TCP连接出现差错,必须释放连接
同步SYN:当SYN=1,ACK=0时,表明这是一个连接请求报文段,若对方同意连接,就将ACK置为1
终止FIN:用来释放连接,当FIN=1时,表明数据发送完毕,要求释放连接
窗口:占两个字节,窗口是指发送本报文段一方的接受窗口,而不是自己的发送窗口,窗口值告诉对方从本报文段的首部算起,接收方目前允许发送的数据量
检验和:占两个字节,包括数据和首部两部分
紧急指针:占两个字节,紧急指针指出了紧急数据的末尾在报文段中的位置
选项:长度可变,最长40个字节,当没有使用选项时,TCP首部长度是20字节。

猜你喜欢

转载自blog.csdn.net/wyn126/article/details/80315620