http 协议 与tcp/ip协议、Socket的区别
综述
“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
而我们平时说的最多的Socket是什么呢,实际上Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:
“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”
一, 传输层的作用
TCP协议:如果说IP协议是找到对方的详细地址。那么TCP协议就是把安全的把东西带给对方。各有分工,互不冲突。按层次分,TCP属于传输层,提供可靠的字节流服务。什么叫字节流服务呢?这个名字听起来让人不知所以然,下面听下我通俗的解释。所谓的字节流,其实就类似于信息切割。比如你是一个卖自行车的,你要去送货。安装好的自行车,太过庞大,又不稳定,容易损伤。不如直接把自行车拆开来,每个零件上都贴上收货人的姓名。最后送到后按照把属于同一个人的自行车再组装起来,这个拆解、运输、拼装的过程其实就是TCP字节流的过程。
所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。一言以蔽之,TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方
网络层协议提供了两个主机间的通信
传输层提供了两个进程间的通信
二, 网络层的作用
1.异构网络互联
所谓网络的互联是指将两个以上的计算机网络,通过一定的方法,用一种或者多种通信处理设备(中间设备)相互连接起来,以构成更大的网络系统
物理层中继系统:中继器,集成器。
数据链路层:网桥或者交换机。
网络层中继系统:路由器。
网络层以上的中继系统:网关
2.路由与转发
路由选择:指按照复杂的分布式算法。根据从各相邻路由器所得到的关于整个网络的拓扑情况,动态地改变所选择的路由
分组转发:指路由器根据转发表将用户的IP数据报从合适的端口转发出去。
3.拥塞控制
由于出现过量的分组而引起网络性能下降的现象称为拥塞。
三, 数据链路层的作用
1、为IP模块发送和接收IP数据报。
2、为ARP模块发送ARP请求和接收ARP应答。
3、为RARP发送RARP请求和接收RARP应答。
四 TCP为什么要进行四次挥手:
其大体流程如下:
客户端发其结束请求,发送seq=X,处于FIN_WAIT_1状态
服务端收到结束请求,发送应答ACK=X+1,处于CLOSE_WAIT状态
客户端收到X的应答后,处于FIN_WAIT_2状态,此时还可以接收来自服务端的数据
服务端没有数据要发送,也发送结束请求,seq=Y,处于LAST_ACK状态
客户端又收到服务端的结束请求,客户端回应ACK,此时处于TIME_WAIT状态,确保ACK能够到达服务端;服务端收到客户端最终ACK,关闭连接。
2MSL时间结束后,无论服务端是否收到最终ACK,客户端完全结束连接
为什么建立一个TCP连接需要三次握手,而终止一个连接需要四次挥手呢?这是因为TCP半关闭造成的。由于一个TCP连接是全双工的,在两个方向上都能传输数据,因此两个方向就需要单独关闭。所以这个流程是这样的:
客户端执行主动关闭,发送FIN报文,告诉服务端,我没有数据要发送了,我要关闭连接,当然了,你有啥数据要给我,我随时候着
服务端收到后,必须及时告诉客户端我收到了,因此先回复客户端一个ACK。但是服务端可能还有未发送完的数据,因此它可以将自己未完成的数据进行发送,发送完成之后,再发送给客户端FIN报文,表明我也没啥要发送的了,关闭吧
客户端收到后,也回复ACK响应,最终关闭连接
因而整个过程需要四次挥手