网络协议

###

一,tcp/ip协议

tcp和udp:tcp像打电话,这是互动的,这是tcp的应答机制,全双工,udp像发短信,没有回复,是半双工,所以tcp复杂但是安全稳定
端口:指TCP/IP协议中的端口,端口号的范围从0到65535,比如浏览器网页服务的80端口,ftp的21端口,ssh的22端口,mysql的3306端口,redis的6379端口,
ip地址:每一个电脑都有一个ip地址,而且在公网中是独一无二的,每一个联网的程序都有一个端口,这样通过ip+端口,就可以在网络中,找到唯一的一个程序,

二,tcp的三次握手四次挥手

TCP协议的三次握手,四次挥手

3次握手:
这个通信的过程有一个3次握手的过程,
1次握手:客户端往服务端发信息,问我能发信息吗?同时携带一个标志,seq=x
2次握手:服务端往客户端发信息,说能,然后询问我能往客户端发信息吗?这是两个合成一个了,同时会发送两个标志,seq=y,ack=x+1
3次握手:客户端往服务端发信息,说能,同时会发送两个标志,ack=y+1

建立通信:
这样就建立了通信了,建立了连接就不会断了,就可以进行来回通信了,
后面就可以传输数据了,客户端传输数据,然后服务端告诉客户端返回数据,这就是tcp的应答机制了,

4次挥手:
结束的时候,可以是服务端发起,也可以是客户端发起,
假设是客户端发起挥手,
1次挥手:客户端往服务端发信息,说我不想发送信息了
2次挥手:服务端往客户端发信息,说好的
3次挥手:服务端往客户端发信息,说我也不想发送信息了
4次挥手:客户端往服务端发信息,说好的
这样四次挥手就结束了通信了,

三次挥手和四次挥手之间就确保了数据可以稳定传输,

为什么会有四次挥手?
在建立连接的时候,Server把响应客户端的请求和请求客户端的确认放在一起发送给客户端了,即第二次握手时有SYN+ACK
而断开连接的时候,一个方向的断开,只是说明该方向数据已传输完毕,而另一个方向或许还有数据,
所以得等到另一个方向数据也全部传输完成后,才能执行第三次挥手
因为socket是全双工的,有收发两个通道,所以这两个都要关闭才可以,所以会有四次来回,

三,tcp和udp比较

tcp协议和udp协议比较:
1,udp 直接发送信息,不需要建立连接,tcp需要建立连接
2,所以UDP快,但是不安全,tcptcp比较安全,有反馈,这是牺牲效率完成的
3,而且udp发送之后有没有收到,是没有返回信息的,所以不知道有没有收到,
tcp比较安全,更加稳定,tcp也可能丢包,但是会重发,比如打电话,打电话的时候会嘟嘟嘟的响,这是在确定通道,通了之后这个通道会占用,别人就不能打了,
所以tcp比较复杂, 但是比较安全,稳定,


udp就像是发短信,
tcp就像是打电话,
udp想象成写信,每一封信都要写收件人的地址,这种不太安全,这封信可能丢,

tcp采用了应答机制,
比如udp,
a给b发了一个信息,b有没有收到,这是不会给a回复的,
但是tcp,
a发送了一个消息给b,b会告诉a我收到了,这是有回复的,a发送了之后,会开始计时,如果没有收到,会超时重传,
所以tcp的机制,就比较安全,会确保数据已经传递过去了,

udp发送,客户端发送了之后,服务器是没有反馈数据的,也就是你有没有真的发过去,是不知道的,
tcp,一大特点就是操作系统的会互相打招呼,是需要返回数据的,告诉你是不是你发的东西我真的收到了,

####

四,http协议

http协议:HyperText Transfer Protocol,超文本传输协议,是一种发布和接收HTML页面的方法。服务器端口号是80。
http和https的区别:https是http协议的加密版本,在HTTP下加入了SSL层。服务器端口号是443。

http请求的内容主要有请求方法,请求url,请求头,请求体
http响应的内容主要有响应状态码,响应头,响应体,

http常用的请求方法:在Http协议中,定义了八种请求方法。常用的是get和post, http常用的请求头:User
-Agent:浏览器名称。Referer:表明当前这个请求是从哪个url过来的。Cookie:http协议是无状态的。所以需要cookie保持长连接 http常见响应状态码:200正常,300重定向,400客户端错误,403服务器拒绝访问,权限不够,500服务器错误

####

五,七层网络协议和五层网络协议,

互联网协议

a) 四层协议:应用层、传输层、网络层、网络接口层
b) TCP/IP五层模型
五层协议: 应用层:用户使用的应用程序都归属于应用层,作用为规定应用程序的数据格式。
抓包工具,比如fiddler,Charles,都是只能抓应用层的协议,wareshark可以抓传输层的协议,但是一般不用这个软件太重了,
http协议,FTP,SMTP协议,都在应用层,
tcp,udp,在传输层,
ip协议,在网络层,
传输层:网络层帮我们找到主机,但是区分应用层的应用就是靠端口,所以传输层就是建立端口到端口的通信。(端口范围0
-655350-1023为系统占用端口) 网络层:区分不同的广播域或者子网(否则发送一条数据全世界都会收到,是灾难)。 数据链路层:定义电信号的分组方式。 物理层:基于电器特性发送高低点电压(电信号),高电压对应数字1,低电压对应数字0。

c)OSI七层模型
七层协议:(应用层、表示层、会话层)、传输层、网络层、(数据链路层、物理层)

####

六,用户在浏览器输入一个url到看到数据,发生了什么?

浏览器访问服务器的过程:这是一个面试题,
输入域名,比如baidu.com,

http协议的认识。流程:
1.域名解析,会到dns服务器会找到对应的ip地址,全球的都在这里,
域名解析检查顺序为:浏览器自身DNS缓存---》OS自身的DNS缓存--》读取host文件--》本地域名服务器--》权限域名服务器--》根域名服务器。
如果有且没有过期,则结束本次域名解析。域名解析成功之后,进行后续操作
2.tcp3次握手建立连接
3.建立连接后,发起http请求
4.服务器端响应http请求,浏览器得到到http请求的内容
5.浏览器解析html代码,并请求html代码中的资源
6.浏览器对页面进行渲染,展现在用户面前,浏览器拿到响应报文后,再通过 浏览器引擎去渲染网页,解析DOM树,javascript引擎解析并执行脚本操作,插件去干插件该干的事儿

说白了,所谓web的本质,无非是:请求/处理/响应 ,任何的web服务器,任何的服务端编程语言,都没法脱离这个本质。

####

####

原文地址:https://www.cnblogs.com/andy0816/p/15144352.html