网络基础
1.应用层
程序员写的满足我们日常需求的网络程序,都是在应用层。

1.1HTTP协议的认识
应用层协议是我们程序员自己定义的,大佬们定义的HTTP(超文本传输协议)就是其中之一。我们平常看到http://…这是非完整的网址,有时也可以看到https,这是在HTTP协议基础上加密而成的。
URL:俗称网址(统一资源定位符)
一个较为完整的URL应该是如下的:

协议方案名称://用户名:密码@服务器地址:端口号/请求资源路径?查询字符串#片段标识符
- 登录信息:就是用户名与密码,但是现在一般看不到,其破坏隐私性。
- 服务器地址:其实就是IP地址转化的,又称域名,是为了方便记忆。
- 服务器端口号:默认端口号。
- 带层次的文件路径:dir是一个标识符,请求资源路径,’/'并非根目录,只是相对路径。
- 查询字符串:给服务器提交数据。
- 片段标识符:标识页面位置。
1.2URL解码与编码
查询字符串中若是出现特殊字符,则有可能与URL中间隔符产生歧义导致URL解析失败 。
编码:将需要转码的字符串转成16进制,然后从右向左,取4位(不足四位直接处理),每2位做一位,前面加上%,编码成%xy格式
解码:当遇到%,则认为紧跟其后的两个字符需要转码,将第一个字符转换为数字左移4位与第二个字符转换后的数据相加。
解码与编码是逆过程
1.3HTTP协议格式
1.3.1 http请求
- 请求首行:请求方法+URL+协议版本(0.9,1.1, 1.0 ,2)
- Header:请求的属性,冒号分割的键值对,每组属性之间使用\n分割,遇到空行表示Header部分结束
- Body:空行后面的内容都是body,body允许为空字符串,如果body存在,则在Header中会有Content-Length属性来标识body的长度。
(头部以一个个key-value组成的键值对,并且各个键值对之间以\n作为间隔,通过\r\n识别头部与正文并作为头部与正文的间隔)
1.3.2 http响应
- 响应首行:版本号+响应状态码+状态码描述符信息
- Header:请求的属性,冒号分割的键值对,每组属性之间使用\n分割,遇到空行表示Header部分结束
- 空行后面的内容都是body,body允许为空字符串,如果body存在,则在Header中会有Content-Length属性来标识body的长度,如果服务器返回了一个html页面,那么html页面内容就是在body中
1.4Http的方法,状态码,常见Header
http中常见的方法

GET偏向获取数据(但是也不代表不提交数据),但get莫有正文,提交后的数据在URL的查询字符串中,但是也非专门提交,URL长度有限。
POST偏向提交数据到正文,更多的是向服务器端提交表单数据。
PUT向服务器提交数据
HEAD与get类似,但响应不同,获取响应头信息
http的状态码

3xx:分永久性重定向与临时性重定向
创建进程,线程,计算时的错误都是服务器错误
最常见的状态码, 比如 200(OK), 404(Not Found,资源未找到), 403(Forbidden), 302(Redirect, 临时重定向), 301(永久重定向)504(Bad Gateway),400(请求格式不对),502(网络格式不通畅)
HTTP常见Header
- Content-Type: 数据类型(text/html等),显示方式
- Content-Length: Body的长度
- Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
- User-Agent: 声明用户的操作系统和浏览器版本信息;
- referer: 当前页面是从哪个页面跳转过来的;
- location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问,后面加上location
- Cookie: 用于在客户端存储少量信息,保存以前的客户端登录信息。保存在服务器端(set-cookie),保存在客户端(cookie)
- cache-control:缓存寿命
- transfer-Encoding: chunked,以模块形式传输,如果存在此属性可以不写Content-Length
2.传输层
负责数据能够从发送端传输到接收端
2.1端口号
2.1.1端口号的认识
端口号标识了一台主机上进行通信的不同的应用程序 ,标识接受到的数据应该交给那个进程处理。端口号和应用层绑定,和传输层有一定关系,标识特殊服务的。
在TCP/IP协议中,用源端地址,源IP地址。目的IP地址,目的端口,协议号这样的五元组来标识一个通信。每条数据必须含有五元组。
2.1.2端口号划分
unit16-t:16位无符号整数
- 0-1023:知名端口号,HTTP(80端口),FTP(21端口),SSH(22端口)这些应用层协议,他们的端口号是固定的
- 1024-65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的
2.2UDP协议
UDP协议端格式

- 16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度,一次传输的最大数据是65536个字节
- 如果校验和出错(二进制反码求和), 就会直接丢弃
UDP的特点:
- 无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;
- 不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;
- 面向数据报: 不能够灵活的控制读写数据的次数和数量;
总结:知道对端的地址就可以直接发送数据,但是对方是否收到数据,数据是否正确有效并不关心,数据只能整条交付,无法控制数据的大小。应用层交给UDP多长的报文,UDP原样发送,既不会拆分也不会合并。UDP不保证数据有序,因此若是应用层分包还需要用户在应用层进行包序管理。为了防止用户接收半条数据,导致UDP剩余数据无法根据协议字段中数据报长度确定长度,因此UDP只能整条交付。优点是简单快速,占资源少。
UDP的缓冲器
UDP没有真正意义上的发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作;
UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP有序,报缓冲区满了, 再到达的UDP数据就会被丢弃;
注意事项
UDP协议首部中有一个16位的最大长度,16位的数据报长度决定了一个UDP协议数据data长度不能大于64K(2^16=25536字节)-8,否则发送失败。如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装。HTTP通过空行分离,UDP通过定长报文分离。
应用层在传输层基于UDP实现的协议:DNS(域名解析协议)、DHCP,当然, 也包括你自己写UDP程序时自定义的应用层协议。
2.3TCP协议
2.4TCP与UDP的区别
TCP与UDP区别总结:
- TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保 证可靠交付
- TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
- UDP没有拥塞控制(),因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
- 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
- TCP首部开销20字节;UDP的首部开销小,只有8个字节
- TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
3.网络层
3.1IP协议
在复杂的网络环境中确定一个合适的路径(复杂指的是多个路由选择,保证容载性)。网络的IP地址中不能随意分配,因为随意分配很容易造成IP冲突,因此IP地址需要得到合理的管理才行。一个路由器可以组建一个局域网,这时路由器向局域网中的主机分配IP地址时,就必须带有自己的网络的标识----网络号,这时需要将每个网络号规范起来就可以避免IP地址冲突。在一个局域网中,路由器向主机分配IP地址,还能够在局域网中标识这个主机-----标识就是主机号,IP的组成:网络号+主机号,保证了相邻的网络不能具有相同的网络号就可以避免IP地址冲突
主机:配有Ip地址,但是不是路由控制的设备
路由器:即配有IP地址,又能进行路由控制
节点:主机和路由器的统称
详解IP协议
3.2路由
在复杂的网络结构中,找到一条通往终点的路线。
路由的过程, 就是这样一跳一跳(Hop by Hop) “问路” 的过程 ,所谓 “一跳” 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。
IP数据包的传输过程也和问路一样
- 当IP数据包, 到达路由器时, 路由器会先查看目的IP;
- 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
- 依次反复, 一直到达目标IP地址;
那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表; 所有的路由器都是由路由表记录连接在路由器上的网络,路由根据目标网络号路由的。
4.数据链路层
数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据
4.1认识以太网
- “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
- 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;
- 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;
以太网帧格式

-
源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;
-
帧协议类型字段有三种值,分别对应IP、ARP、RARP;
-
帧末尾是CRC
4.2MAC地址
MAC地址:网络物理硬件地址,用于标识硬件设备。
- MAC地址用来识别数据链路层中相连的节点;
- 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).
本文详细介绍了TCP/IP四层模型,包括应用层的HTTP协议、URL解码与编码,传输层的TCP与UDP协议及它们的区别,网络层的IP协议和路由,以及数据链路层的以太网和MAC地址概念。通过实例解析HTTP请求响应格式,深入理解TCP的可靠传输与UDP的不可靠传输特性。
2976

被折叠的 条评论
为什么被折叠?



