准备
准备 服务器先启动,服务器上的程序,是一个进程,生成此进程的套接字。 应用层
- 客户端发出请求,如:在网页中输入URL,发送请求,此时浏览器发出的请求中有 请求消息request (resquest格式包括请求行,
请求头部、空行、请求体。)生成已个套接字,此时客户端程序(浏览器)在操作系统上是一个进程,屏蔽网络层,链路层、物理层,可2以看做客户度端程序与服务器程序直接通 过套接字沟通。 - 数据从应用层经套接字到达运输层。运输层主要负责数据的传输。运输层有两个协议,udp和tcp。
- 运输层提供的服务最低有两种;
- 将主机之间的数据交付整理为进程之间的数据交付,称多路复用或者多路分解。
- 将运输层首部报文段差错检查字段进行完整性检查。
- tcp还可以解决以下问题;
- 丢包问题:
解决:重传,直到收到接收方发来的确认码(ACK),才发第二个包。否则,在一定时间内,重发包。称停止等待协议。 - 效率问题;上述停止等待协议太浪费时间,采用流水线方式,就是一次发多个包,同时接收多个确认包。
- 顺序问题:采用流水线问题,会有顺序问题,有可能,后发的包比先发的包先到。解决方案,给发送包加序号,给确认包(ACK)也加序号。值的注意的是,比如
确认的顺序号是3,表示3以前的包都收到了,请发顺序为3的包。 - 流量问题:由于接受端的接受能力有限,如果发送方发送速度超过b接受方的接受能力,会发生拥塞。解决;接受方在接收到数据后,会向发送方,发送一个
表示接收能力的数据,这个数据称为窗口,告诉发送方按照窗口大小,发送包。发送方就按照窗口大小发送包,接收到接收方的确认号,窗口就想后滑动以一格。 这样也解决了流水线方式无节制的发送包。 - 拥塞:网络原因造成,同样采取设置窗口大小解决。窗口大小,由网络告知。
- 连接;接收方的进程还没准备好,发送方就开始发送,造成浪费,采用要连接时采用,3次握手,要结束连接时,4次挥手解决。
网络层(ip层)解决的是两个主机之间的数据交流,不可靠连接。
运输层将数据经套接字交付给进程,或运输层从套接字接收数据,生成报文,交给网络层。称多路复用,反之,称多路分解。
套接字:为了区分不同进程间的网络通讯和连接。主要有3个参数,ip地址,传输层协议(tcp或udp)和端口号。最重要的是端口号。端口号连接了应用层和传输层。
|