一.IP和端口简单介绍
IP:
网络中的设备的标示;
IP:127.0.0.1(本机回环地址) localhost
端口号:
用于标示进程的逻辑地址,不同的进程的标示;
有效端口:0 ~ 65535, 其中 0~1024为系统端口或保留端口
二.数据传输示意图
【1】物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换),这一层的数据叫做比特。
【2】数据链路层:定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问,这一层通常还提供错误检测和纠正,以确保数据的可靠传输。
【3】网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择,Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
【4】传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的), 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组,常常把这一层数据叫做段。
【5】会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路,主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。
【6】表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。
【7】应用层: 是最靠 近用户的OSI层,这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。
三.传输层协议UDP/TCP
1.UDP(不可靠传输协议 /用户数据报协议) <可以类比为:发短信>
特点: 1).只管发送,不确认对方是否接收的到;
2).将数据源和目标封装成数据包中,不需要建立连接;
3).每个数据包的大小限制在64k之内;
4).因为不需要建立连接,所以数度快,同时也更容易丢包,不可靠;
2.TCP(可靠传输协议 /传输控制协议) <可以类比为:打电话>
特点:1).建立连接,形成传输数据通道;
2).在连接中进行大数据传输(数据大小不受限制);
3).通过三次握手完成连接,是可靠协议,安全送达;
4).因为必须建立连接,所以效率会稍低;
扩展:
TCP建立连接三次握手流程:
(1) 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。(客户端告诉服务端:我要连接你)。
(2) 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。(服务端告诉客户端:可以,你连接吧)。
(3) 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。 (客户端告诉服务端:好的,那我开始连接你了)。
tcp为什么要三次握手?
注意: HTTP是基于TCP协议的,所以每次都是客户端发送请求,服务器应答,但是TCP还可以给其他应用层提供服务,即可能A、B在建立链接之后,谁都可能先开始通信。
1.如果两次,那么B无法确定B的信息A是否能收到,所以如果B先说话,可能后面的A都收不到,会出现问题 。
2.如果四次,那么就造成了浪费,因为在三次结束之后,就已经可以保证A可以给B发信息,A可以收到B的信息; B可以给A发信息,B可以收到A的信息。
TCP断开连接四次挥手流程:
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。(客户端告诉服务端:没有数据要发给你了)。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。(服务端告诉客户端: 你的请求我收到了,但是我还没准备好,请继续你等我的消息,服务端可能还有数据没发完,所以这里不能够直接关闭)。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。(服务端告诉客户端: 我的数据都发完了,准备好关闭连接了)。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。(客户端告诉服务端:我收到了,那我断开了,拜拜)。
https://blog.csdn.net/qzcsu/article/details/72861891(4次挥手)
1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
四.Socket(套接字层/插座)
官方解释:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。(什么鬼?不理解?)
自己的理解: 所谓套接字层,由于在OSI网络7层模型中找不到scoket的位置,socket应该是居于应用层和传输层之间, socket就是两个程序间的通讯管道( ip+ 端口 == socket)。
五.TCP/UDP ,HTTP, Socket区别
三者从本质上来说没有可比性,只是很多人概念模糊,区分不开。
TPC/IP协议是传输层协议,主要解决数据如何在网络中传输;
socket则是建立通讯管道,对TCP/IP协议的封装和应用,有了通讯管道,我们才能使用TCP/IP协议;
HTTP是应用层协议,主要解决如何包装数据,HTTP协议是建立在TCP协议之上的一种应用层协议。