计算机网络之应用层
计算机网络之应用层
文章目录
前言
参考视频:哈工大B站视频,视频ppt链接放在评论区了
网络应用进程通信
进程:主机上运行的程序,
不同主机上进程通信:消息交换 和 套接字:Socket,进程间通过socket发送接收消息
寻址进程:每个进程必须有标识符,一般对进程都会有一个标识符,比如Linux对进程的管理中,可以通过
kill [PID] #进程标号
端口号
端口是操作系统与外界通信的窗口,端口与进程是对应的,主机为上每个需要通信的进程分配一个端口号。
端口号还分
服务器端口
熟知端口号:范围0-1023
还有动态端口号1024-65535
客户端端口
49152 - 65535,也叫短暂端口号,这种端口存在时间是短暂的,是为了标识客户端进程,更加好传输
Web应用
对象的寻址:url
<协议>://<主机>:端口/<路径>
https://baidu.com
Http:超文本传输协议:
C/S结构:客户端/服务器结构
客户:请求、接收、展示Web对象
服务器
无状态协议:服务器不维护任何有关客户端过去所发请求的信息。
无状态比如说,你输入一个url到浏览器中,返回的页面和你过几秒再次输入同样的url得到的页面是一样的,服务器是不知道你10s前登录过。
但是缺失状态意味着如果下次请求需要这一次的数据,就需要重新向服务器重新提交请求。
有状态协议:协议更复杂,如果客户或服务器失效,会产生状态的不一致,会解决这一种不一致代价高
Http连接分为非持续连接和持续连接
非持续连接
4.HTTP服务器关闭TCP连接
5.HTTP客户端收到响应消息,解析html文件,显示html文件,现有10个指向jpeg对象的超链接
6.为每个jpeg对象连接
RTT的定义:从客户端发送一个很小的数据包到服务器并返回所经历的时间
存在问题:
每个对象需要2个RTT,一个RTT即客户端向服务器,服务器返回请求包到客户端的时间,这其中不包括数据传输时间
操作系统需要为每个TCP连接开销资源
持续连接
发送响应后,服务器保持TCP连接的打开
非流水线:每个被引用对象消耗1个RTT
比如你向浏览器请求10个照片,每个照片假设都需要一个RTT,这样的话,就总共需要10个RTT
带流水线:理想情况下,收到所有的引用对象消耗1个RTT
请求10个照片的话,只需要一个RTT的延迟。
非持续连接是指启动一次TCP连接,服务机就向客户机传送一个对象,而持续连接是指服务机可在相同的TCP连接上向客户机发送多个对象。而HTTP/1.0的默认设置是非持续连接,而HTTP1.1的默认设置是持续连接。
HTTP消息的格式
请求消息
ASCII人可读
请求中的GET和POST
首先,在请求中GET和PUSH是用的最多的,可能GET和POST你每天都在接触,或许你已经写了很多GET和POST请求。
post
在请求消息的主体中上传客户端的输入,即参数保存在上述请求消息的Entity Body(实体主体)中
GET
输入消息通过request行的URL字段上传,GET方法通过向URL添加数据,就比如我们平常使用浏览器时,在点击下一个页面时,在上面的URL上会传入一些参数。
https://editor.csdn.net/md?articleId=xxxxxx
两者的区别和相同之处
区别:
1.两种方法传参的方式不同
2.GET可以被缓存,POST不能缓存
3.相比POST,GET的安全性较差,GET的数据是URL的一部分,在发送一些私密信息时使用POST的方法会更加好。
相同之处:
两种都是在用同一个传输层协议,在传输上,没有特别大的区别,报文的格式仅仅是报文的几个字符不同而已。
响应消息
Cookie
Http协议无状态的。前面我们已经讲过无状态,而cookie是一些数据,存储在你的电脑的文本文件中,cookie的作用就是用于解决“如何记录客户端的用户信息”,当浏览器从服务器请求web页面时,属于该页面的cookie会被添加到请求中,服务端就可以通过这种方式获取用户信息。
Web缓存/代理服务器
SMTP协议
消息的传输
关闭
Email消息格式
MIME多媒体邮件扩展
在邮件头部增加额外的行以声明MIME的内容类型
DNS
主要是用来主机/路由器的识别问题,域名和IP地址的映射问题,TCP/IP协议中主要是通过IP地址和端口号来确定某一台主机上的某个程序。
DNS服务
采用分布式架构,也可以说是层次结构
域名解析过程
1.输入域名,先查找自己主机对应的域名服务器,域名服务器先查询自己数据库。
2.没找到就往上级域名服务器请求查找,直到找到这个域名的IP地址
3.一般域名服务器拿到后,会将其缓存起来。
常见的两种的查询方式:
迭代查询
被查询服务器返回域名解析服务器的名字
我不认识这个域名,但是你可以问这个服务器,这样直到找到目的主机,
递归查询
将域名解析的任务交给所联系的服务器,联系的服务器就找自己缓存的,或者找下一个服务器,直至找到这个域名,就一个个服务器返回到一开始请求的主机
Socket编程
套接字是非常重要的,套接字接口可以控制协议找工作,从而实现网络通信,达到跨主机通信。
应用编程API:就是应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口
标识通信端点(对外):
ip地址+ 端口
Socket抽象:类似于文件的抽象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QhyPXKUZ-1646739116857)(C:\Users\大勇\AppData\Roaming\Typora\typora-user-images\image-20220302201904649.png)]
面向TCP/IP的服务类型,应用层,应用进程
传输层TCP/UDP
网络层IP/ICMP/IGMP
TCP:可靠、面向连接、字节流传输、点对点
UDP:不可靠、无连接、数据报传输
listen置服务器端套接字处于监听状态,设置监听队列大小
accept()
连接上后,利用新创建的套接字
recv和recvform
Socket客戶端
inet_addr()实现点分十进制IP地址到32位IP地址转换
客户端还可能使用服务名标识服务器端口
解析协议号:TCP协议
服务器类型:
循环无连接
1.创建套接字
2.绑定端点地址(INADDR_ANY+端口号)
3.反复接收来自客户端的请求
4.遵循应用层协议,构造响应报文,发送给客户
循环面向连接
并发无连接
并发面向连接
总结
本文的大部分照片截自哈工大的网课,在b站上截的,加上了一些自己的理解,如有不对的地方,望各位大佬指教,如果有需要这个课件资源的,可以在下面说。