socket、Tcp/IP通信

1.使用udp和tcp进程网络传输,为什么tcp能保证包是发送顺序,而 udp无法保证?
主机每次发送数据时,TCP就给每个数据包分配一个序列号并且在一个特定的时间内等待接收主机对分配的这个序列号进行确认,如果发送主机在一个特定时间内没有收到接收主机的确认,则发送主机会重传此数据包。接收主机利用序列号对接收的数据进行确认,以便检测对方发送的数据是否有丢失或者乱序等,接收主机一旦收到已经顺序化的数据,它就将这些数据按正确的顺序重组成数据流并传递到高层进行处理。
UDP不提供可靠的数据传输!一个端口发往同一个目的端口的几个数据包的顺序可能会出现混乱

2.TCP/IP会什么会采取三次握手
采用三次握手是为了防止客户端失效的连接请求报文段突然又传送到服务器端,因而产生错误。失效的连接请求报文段是指:客户端发送的连接请求没有收到服务器的确认,于是经过一段时间后,客户端又重新想服务器发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,客户端第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟到达服务器,服务器以为是客户端又发送的连接请求,于是同意请求,并发回确认,但此时客户端不理会这个确认,于是服务器一直等待客户端发送的的确认数据,导致服务器端的资源浪费。

3.OSI(Open System Interconnect):开放系统互联,是一个七层的计算机网络模型,分别为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
TCP/IP(Transmission Control Protocol/Internet Protocol):传输控制协议/因特网互联协议,是一个四层的计算机网络模型,分别为:网络接口层、网络层、传输层和应用层。结合OSI和TCP/IP产生了一个五层结构,分别为:物理层、数据链路层、网络层、传输层和应用层。Internet就是采用的TCP/IP协议。

4.详细解释一下IP协议的定义,在哪个层上面,主要有什么作用?TCP和UDP呢?
答:IP协议是网络层的协议,它是为了实现相互连接的计算机进行通信设计的协议,它实现了自动路由功能,即自动寻径功能。TCP是传输层的协议,它向下屏蔽IP协议的不可靠传输的特性,向上提供一种面向连接的、可靠的点到点数据传输。TCP在可靠性和安全性上等更有保证。UDP也是传输层协议,它提供的是一种非面向连接的,不可靠的数据传输,这主要是有些应用需要更快速的数据传输,比如局域网内的大多数文件传输都是基于UDP的。UDP在传输速率上更快,开销更小。

5.请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?
答:交换机用于局域网,利用主机的MAC地址进行数据传输,而不需要关心IP数据包中的IP地址,它工作于数据链路层。路由器识别网络是通过IP数据包中IP地址的网络号进行的,所以为了保证数据包路由的正确性,每个网络都必须有一个唯一的网络号。路由器通过IP数据包的IP地址进行路由的(将数据包递交给哪个下一跳路由器)。路由器工作于网络层。由于设备现在的发展,现在很多设备既具有交换又具有路由功能,两者的界限越来越模糊。

6.实现可靠传输的协议?
(1)停止等待协议:每发送完一帧就停止发送,直到收到接收到发送回来的确认在发送下一帧,如果没有收到接收端的确认,则通过设定的定时器超时了重传上一帧。其存在的三种可能:
重传可能会导致接收端收到相同的帧,这时候根据序号来判定,如果收到的帧的序号之前已经被接收到了,则新接收到的帧被丢弃。因为可能会出现接收端不能在一次情况就能正确接收,因此帧需要在发送端备份一份,直到被确认后才丢弃,因为该协议一次只能发送一帧,因此发送端的缓存区不需要太大。
(2)连续ARQ协议:发送窗口大于1,接收窗口等于1,因此发送窗口已经发送到了序号为5的帧,但是接收端接收到序号为3的帧出现错误时,那3号以后的帧都需要重传,因此出现错误的情况可能会导致重传多个帧,同时为了能够在出错时重传,因此发送出来还没有经过确认的帧都需要在发送端全缓区进行保存,这种情况需要的缓冲区比停止等待协议需要的更大。但采用n比特来表示编号时,则发送窗口的的大小为时,该协议才能正确工作。若用n比特编号时,则发送窗口的大小 WT<=2n-1。
(3)选择重传ARQ协议:发送窗口和接收窗口都大于1,这种情况可能减少重传帧的数量,若用n比特编号时,则接收窗口的大小为WR £ 2n/2。

7.路由表是做什么用的?在Linux环境中怎么配置一条默认路由?
答:路由表是用来决定如何将一个数据包从一个子网传送到另一个子网的,换句话说就是用来决定从一个网卡接收到的包应该送到哪一个网卡上去。路由表的每一行至少有目标网络号、子网掩码、到这个子网应该使用的网卡这三条信息。当路由器从一个网卡接收到一个包时,它扫描路由表的每一行,用里面的子网掩码与数据包中的目标IP地址做逻辑与运算(&)找出目标网络号。如果得出的结果网络号与这一行的网络号相同,就将这条路由表六下来作为备用路由。如果已经有备用路由了,就载这两条路由里将网络号最长的留下来,另一条丢掉(这是用无分类编址CIDR的情况才是匹配网络号最长的,其他的情况是找到第一条匹配的行时就可以进行转发了)。如此接着扫描下一行直到结束。如果扫描结束仍没有找到任何路由,就用默认路由。确定路由后,直接将数据包送到对应的网卡上去。在具体的实现中,路由表可能包含更多的信息为选路由算法的细节所用。
在Linux上可以用“route add default gw<默认路由器 IP>”命令配置一条默认路由。

8.内存池、进程池、线程池
应用程序可以通过系统的内存分配调用预先一次性申请适当大小的内存作为一个内存池,之后应用程序自己对内存的分配和释放则可以通过这个内存池来完成。只有当内存池大小需要动态扩展时,才需要再调用系统的内存分配函数,其他时间对内存的一切操作都在应用程序的掌握之中。
应用程序自定义的内存池根据不同的使用场景又有不同的类型。
从线程安全的角度来分,内存池可以分为单线程内存池和多线程内存池。单线程内存池整个生命周期只被一个线程共享,因此则需要在每次分配和释放内存时加锁。相对而言,单线程内存池性能更高,而多线程内存池适用范围更广。
从内存池可分配内存单元大小来分,可以分为固定内存池和可变内存池。所谓固定内存池是指应用程序每次从内存池中分配出来的内存单元大小事先已经确定,是固定不变的;而可变内存池则每次分配 的内存单元大小可以按需变化,应用范围更广,而性能比固定内存池要低。

9.ICMP协议的主要功能
ICMP是“Internet Control Message Protocol”(Internet控制消息协议)的缩写。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

10.组播和广播的概念
组播是一种多点投递的形式,它使用硬件技术,通过使用大量组播地址来通信。当某一组机器需要通信时,选择一个组播地址,并配置好相应的网络接口硬件,识别组播地址,从而收到该组播地址上分组的拷贝。
广播是多点投递的最普遍的形式,它向每一个目的站投递一个分组的拷贝。它可以通过多个单次分组的投递完成,也可以通过单独的连接传递分组的拷贝,直到每个接收方均收到一个拷贝为止。

11.ARP地址解析协议作用
用于建立IP地址到物理地址转换关系的一种协议,以支持物理地址的恰当确定。

12.TCP通过哪些措施,保证传输可靠?
采用数据重传和数据确认应答机制,三次握手

13.运输层协议与网络层协议的区别?
答:网络层协议负责的是提供主机间的逻辑通信
运输层协议负责的是提供进程间的逻辑通信
14.运输层的协议?
答:TCP,传输单位称为:TCP报文段
UDP,传输单位称为:用户数据报
其端口的作用是识别那个应用程序在使用该协议。

14.socket连接和Http连接
由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致 Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

15.HTTP协议通信过程
HTTP采用请求/响应的握手方式,首先自动解析,获取IP后
建立TCP/IP连接,客户端向服务器发送HTTP请求消息,Web服务器收到请求后发送响应消息并向浏览器发送数据,最后web服务器关闭TCP连接,完成一次HTTP通信。

16.IP组播的主要优点有哪些?
(1)大量节约网络带宽、降低网络负载
(2)控制网络流量,降低服务器和CPU负载,增强网络效率
(3)消除流量冗余,使网络性能更优化
(4)支持分布式应用,使得一点对多点、多点对多点、少数点对多点、少数点对少数点的通信应用可行。

17.OSI与TCP/IP分层以及各层功能
OSI :应用层-表示层-会话层
传输层
网络层
数据链路层
物理层
TCP/IP:应用层-传输层-网络层-网络接口层

网络接口层:包含OSI模型中的物理层和数据链路层,支持现有的各种底层网络技术和标准。
网络层:处理IP数据报的传输、路由选择、流量控制和拥塞控制。
传输层:为两台主机上的应用程序提供端到端的通信
应用层:为用户提供一些常用的应用程序

18.ARP请求与应对报文
ARP请求报文:发送方在发送方硬件地址字段中填入本机的物理地址,在发送方协议地址字段中填入本机的协议地址,在目的协议地址字段地址中填入准备解析的目的计算机的IP地址,目的硬件地址不填(为0),在操作类型字段中填入“1”表示是ARP请求。ARP请求是以广播形式在物理网络中发送。
ARP应答报文:目的计算机将收到ARP请求报文中的发送方硬件地址和发送方协议地址放入目的硬件地址和目的协议地址,将自己的硬件地址和协议地址填入发送方硬件地址和发送方协议地址,在操作类型字段中填入“2”,表示是ARP应答。ARP应答是以单播方式在物理网络中发送的。

19.传输层承上启下,屏蔽通信子网的细节,向上层提供通用的进程通信服务。传输层是对网络层的加强和弥补。TCP和UDP是传输层的两大协议。
20.端口分配有两种基本方式,全局端口分配和本地端口分配。
21.在因特网中采用一个三元组(协议,主机地址,端口号)来全局唯一地标识一个进程,用一个五元组(协议,本地主机地址,本地端口号,远程主机地址,远程端口号)来描述两个进程的关联。
22.TCP和UDP都是提供进程通信能力的传输层协议。它们各有一套端口号,两套端口号相互独立,都是0~65535
23.为了实现数据的可靠性传输,TCP在应用进程间建立传输连接。TCP在建立连接时采用三次握手方法解决重复连接问题,在拆除连接时,采用四次挥手方法解决数据丢失问题。
24.TCP采用的基本可靠性技术包括:流量控制,拥塞控制和差错控制
25.TCP采用滑动窗口协议实现流量控制,滑动窗口协议通过发送方窗口和接收方窗口的配合来完成传输控制
26.TCP的拥塞控制利用发送方的窗口来控制注入网络的数据流速度。发送窗口的大小取通告窗口和拥塞窗口中较小的一个
27.TCP通过差错控制解决数据的损坏、重复、失序和丢序问题
30.UDP在IP协议上增加了进程通信的能力。此外UDP通过可选的校验和提供简单的差错控制。但UDP不能提供流量控制和数据报控制
31.FTP要实现的目标:(1)在主机之间共享计算机程序或数据
(2)让本地主机间接地使用远程计算机 (3)向用户屏蔽不同主机中各种文件存储系统的细节(4)可靠高效的传输数据
32.FTP主要特征:(1)控制连接(2)数据连接(3)文件类型(4)格式控制(5)传输模式
33.FTP传输模式:流模式、块模式、压缩模式
34.数据链路层
数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输。
数据链路层两个常用的协议是ARP(AddressResolve Protocol,地址解析协议)和RARP(Reverse Address Resolve Protocol,逆地址解析协议)。他们实现了IP地址和机器物理地址之间的相互转换。
网络层使用IP地址寻址一台机器,而数据链路层使用物理地址寻址一台机器,因此网络层必须先将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供的服务,这就是ARP的用途。RARP协议仅用于网络上某些无盘工作站。因为缺乏存储设备,无盘工作站无法记住自己的IP地址,但他们可以利用网卡上的物理地址来向网络管理者查询自身的IP地址。运行RARP服务的网络管理者通常存有该网络上所以机器的物理地址到IP地址的映射。

35.网络层
网络层实现数据报的选路和转发。网络层的任务是选择路由器等中间节点,以确定两台主机之间的通信路径。同时,网络层对上层协议隐藏了网络拓扑连接的细节,使得在传输层和网络应用程序看来,通信双方是直接相连的。
网络层最核心的协议是IP协议(因特网协议)。IP协议根据数据包的目的IP地址来决定如何投递它,IP协议使用逐跳(hop byhop)的方式确定路径。
网络层另外一个重要协议是ICMP(InternrtControl Message Protocol,因特网控制报文协议),主要用来检查网络连接。ICMP报文分为两类:一类是差错报文,用来回应网络错误,另一类是查询报文,用来查询网络信息。ping程序就是使用ICMP报文查看目标报文是否可达。

36.传输层
传输层为两台主机的应用程序提供端到端的通信。与网络层使用的逐跳通信方式不同,传输层只关心通信的起始端和目的端。
传输层负责数据的收发、链路的超时重发等功能。
传输层主要有三个协议:TCP协议、UDP协议和SCTP协议
TCP协议(Transmission Control Protocol,传输控制协议)为应用层提供可靠的、面向连接的和基于流的服务。
UDP协议(User Datagram Protocol,用户数据报文)为应用层提供不可靠、无连接和基于数据报的服务。
SCTP协议(Stream Control Trasmission Protocol,流控制协议)是为了在因特网上传输电话信号而设计的。

37.应用层
应用层负责应用程序的逻辑。上面三层协议系统负责处理网络通信细节,这部分必须稳定又高效,因此在内核中实现。而应用层则在用户空间实现。
应用层协议很多,举例如下:
ping是应用层序,而不是协议:利用ICMP报文检测网络连接
telnet协议是一种远程登录协议
OSPF(OpenShortest Path First开放最短路径优先)协议提供一种动态路由更新协议,用于路由器之间的通信,以告知对方各自的路由信息。
DNS(Domain NameService 域名服务)协议提供机器域名到IP地址的转换。
应用层协议可能跳过传输层直接使用网络层提供的服务,如ping和OSPF协议。通常既可以使用TCP服务,又可以使用UDP服务,比如DNS协议。
我们可以通过/etc/services文件查看所有知名的应用层协议。

38.封装
上层协议通过分装使用下层提供的服务。应用程序数据在发送到物理网路之前,将沿着协议栈从上往下依次传递。每层协议都将在上层数据的基础上加上自己的头部信息(有时包括尾部),以实现该层的功能,这个过程就是封装。
经过TCP封装后的数据成为TCP报文段,经过UDP封装后的数据成为UDP数据报,它们UDP无须为应用层保存副本,因为它提供的服务不可靠。当一个UDP数据报被成功发送之后,UDP内核缓冲区中的该数据就被丢弃,如果应用层序检测到该数据报未能被接收端正接收,并打算重发这个数据报,则应用层序需要重新从用户空间将该数据报拷贝到UDP内核发送缓冲区。而发送TCP报文,会在TCO缓冲区中保存副本。
经过IP封装后的数据成为IP数据报,也包括头部信息和数据部分。其中数据部分就是TCP报文段、UDP数据报或者ICMP报文。
经过数据链路封装后的数据成为帧。
帧的最大传输单元(MaxTransimit Unit, MTU),即帧最多能携带多少上层数据,通常受网络限制,以太网的MTU是1500字节。帧才是最终在物理网络上传送的字节序列。
利用ifconfig命令可以查看MTU值,还可以显示或配置网络设备(网络接口卡)。

39.分用
当帧达到目的主机时,将沿着协议栈向上一次传递。各层协议一次处理帧中本层负责的头部数据,以获取所需信息,并将最终处理后的帧交给目标应用程序,这个过程叫做分用。分用是依靠头部信息中的类型字段实现的。
帧提供的头部信息中的类型字段用于区分IP,ARP,RARP。其中IP字段值为0x800,ARP为0x806,RARP为0x835。
同样IP数据报的头部采用16为协议字段区分ICMO,TCP,UDP。
TCP和UDP则通过头部中的16为端口号区分上次应用程序,比如DNS端口号为53,HTTP为80。所以知名应用层协议使用的端口号都可以在/etc/services中找到。

40.面试题:怎么去理解TCP/IP协议?
(1)TCP/IP体系结构
TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输层服务,而IP则是提供网络层服务。TCP/IP包括以下协议:
IP:网间协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储。同时为ICMP,TCP,UDP提供分组发送服务。用户进程通常不需要涉及这一层。
ARP:地址解析协议(Address Resolution Protocol) 此协议将网络地址映射到硬件地址。
RARP:反向地址解析协议(Reverse Address Resolution Protocol) 此协议将硬件地址映射到网络地址。
ICMP:网间报文控制协议(Internet Control Message Protocol) 此协议处理信关和主机的差错和传送控制。
TCP:传送控制协议(Transmission Control Protocol) 这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。它要为用户进程提供虚电路服务,并为数据可靠传输建立检查。(注:大多数网络用户程序使用TCP)
UDP: 用户数据报协议(User Datagram Protocol) 这是提供给用户进程的无连接协议,用于传送数据而不执行正确性检查。
FTP: 文件传输协议(File Transfer Protocol) 允许用户以文件操作的方式(文件的增、删、改、查、传送等)与另一主机相互通信。
SMTP: 简单邮件传送协议(Simple Mail Transfer Protocol) SMTP协议为系统之间传送电子邮件。
TELNET:终端协议(Telnet Terminal Procotol) 允许用户以虚终端方式访问远程主机。
HTTP: 超文本传输协议(Hypertext Transfer Procotol)
TFTP: 简单文件传输协议(Trivial File Transfer Protocol)
(2)TCP/IP特点
TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现。因此用户一般不涉及。编程时,编程界面有两种形式:一、是由内核心直接提供的系统调用;二、使用以库函数方式提供的各种函数。前者为核内实现,后者为核外实现。用户服务要通过核外的应用程序才能实现,所以要使用套接字(socket)来实现。
专用术语
(1)套接字
套接字是网络的基本构件。它是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连听进程。套接字存在通信区域(通信区域又称地址簇)中。套接字只与同一区域中的套接字交换数据(跨区域时,需要执行某和转换进程才能实现)。WINDOWS 中的套接字只支持一个域——网际域。套接字具有类型。
WINDOWS SOCKET 1.1 版本支持两种套接字:流套接字(SOCK_STREAM)和数据报套接字(SOCK_DGRAM)。
(2)WINDOWS SOCKETS 实现
一个WINDOWS SOCKETS 实现是指实现了WINDOWS SOCKETS规范所描述的全部功能的一套软件。一般通过DLL文件来实现。
(3)阻塞处理例程
阻塞处理例程(blocking hook,阻塞钩子)是WINDOWS SOCKETS实现为了支持阻塞套接字函数调用而提供的一种机制。
(4)多址广播(multicast,多点传送或组播)
是一种一对多的传输方式,传输发起者通过一次传输就将信息传送到一组接收者,与单点传送(unicast)和广播(Broadcast)相对应。

  1. 网络七层经典解释
    物理层(Physical layer):是参考模型的最低层。该层是网络通信的数据传输介质,由连接不同结点的电缆与设备共同构成。主要功能是:利用传输介质为数据链路层提供物理连接,负责处理数据传输并监控数据出错率,以便数据流的透明传输。
    数据链路层(Data link layer):是参考模型的第2层。 主要功能是:在物理层提供的服务基础上,在通信的实体间建立数据链路连接,传输以“帧”为单位的数据包,并采用差错控制与流量控制方法,使有差错的物理线路变成无差错的数据链路。
    网络层(Network layer):是参考模型的第3层。主要功能是:为数据在结点之间传输创建逻辑链路,通过路由选择算法为分组通过通信子网选择最适当的路径,以及实现拥塞控制、网络互联等功能。
    传输层(Transport layer):是参考模型的第4层。主要功能是向用户提供可靠的端到端(End-to-End)服务,处理数据包错误、数据包次序,以及其他一些关键传输问题。传输层向高层屏蔽了下层数据通信的细节,因此,它是计算机通信体系结构中关键的一层。
    会话层(Session layer):是参考模型的第5层。主要功能是:负责维扩两个结点之间的传输链接,以便确保点到点传输不中断,以及管理数据交换等功能。
    表示层(Presentation layer):是参考模型的第6层。主要功能是:用于处理在两个通信系统中交换信息的表示方式,主要包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。
    应用层(Application layer):是参考模型的最高层。主要功能是:为应用软件提供了很多服务,例如文件服务器、数据库服务、电子邮件与其他网络软件服务。

OSI(Open System interconnection)开放系统互连参考模型
ISO(International Standards Organization)国际标准化组织
第一层:物理层
机械性能:接口的型状,尺寸的大小,引脚的数目和排列方式等。
电气性能:接口规定信号的电压、电流、阻抗、波形、速率及平衡特性等。
工程规范:接口引脚的意义、特性、标准。
工作方式:确定数据位流的传输方式,如:单工、半双工或全双工。
物理层协议有:
美国电子工业协会(EIA)的RS232,RS422,RS423,RS485等;
国际电报电话咨询委员会(CCITT)的X.25、X.21等;
物理层的数据单位是位(BIT),典型设备是集线器HUB。
这层主要和硬件有关,与软件关系不大。
第二层:链路层
链路层屏蔽传输介质的物理特征,使数据可靠传送。
内容包括介质访问控制、连接控制、顺序控制、流量控制、差错控制和仲裁协议等。
链路层协议有:
协议有面向字符的通讯协议(PPP)和面向位的通讯协议(HDLC)。
仲裁协议:802.3、802.4、802.5,即:
CSMA/CD(Carrier Sense Multiple Access with Collision Detection)、Token Bus、Token Ring
链路层数据单位是帧,实现对MAC地址的访问,典型设备是交换机Switch。
第三层:网络层
网络层管理连接方式和路由选择。
连接方式:虚电路(Virtual Circuits)和数据报(Datagram)服务。
虚电路是面向连接的(Connection-Oriented),数据通讯一次路由,通过会话建立的一条通路。
数据报是非连接的(Connectionless-Oriented),每个数据报都有路由能力。
网络层的数据单位是包,使用的是IP地址,典型设备是路由器Router。
这一层可以进行流量控制,但流量控制更多的是使用第二层或第四层。
第四层:传输层
提供端到端的服务。可以实现流量控制、负载均衡。
传输层信息包含端口、控制字和校验和。
传输层协议主要是TCP和UDP。
传输层位于OSI的第四层,这层使用的设备是主机本身。 
第五层:会话层
会话层主要内容是通过会话进行身份验证、会话管理和确定通讯方式。
一旦建立连接,会话层的任务就是管理会话。
第六层:表示层
表示层主要是解释通讯数据的意义,如代码转换、格式变换等,使不同的终端可以表示。
还包括加密与解密、压缩与解压缩等。
第七层:应用层
应用层应该是直接面向用户的程序或服务,包括系统程序和用户程序,
例如www、FTP、DNS、POP3和SMTP等都是应用层服务。
数据在发送时是数据从应用层至物理层的一个打包的过程,
接收时是数据从物理层至应用层的一个解包的过程,
从功能角度可分为三组,1、2层解决网络信道问题,3、4层解决传输问题,5、6、7层处理对应用进程的访问。
从控制角度可分为二组,第1、2、3层是通信子网层,第4、5、6、7层是主机控制层。

42.TCP的流量控制和拥塞控制
TCP连接的双方都为连接设置了接收缓存。相关的应用进程可以从该缓存中读取数据。
TCP采用动态滑动窗口机制进行流量控制,防止由于发送方发送数据太快而造成接收方缓冲区溢出。
发送方保存一个接收窗口的变量用于流量控制。接收窗口说明接收方还有多少可用缓存空间,发送方发送的数据量一定要小于接收窗口的大小。因为接收方的缓存空间是动态变化的。接收方使用“窗口大小”,说明接收缓存空间的大小。
当网络上有太多的数据报,超过了网络的容量,或者是网络资源使用、分配不合理时就会出现数据报时延增加、丢弃概率增大、系统性能下降等现象,这种现象称为拥塞。
产生拥塞的根本原因在于用户给网络提供的负载大于网络资源的容量和处理能力。
TCP拥塞控制方法是让发送方感知拥塞,来限制其向TCP连接发送数据的速率。若发送方感知到从它到目的地之间的路径上没有什么拥塞,则增加发送速率;
若发送方感知到有拥塞,则降低发送速率。
TCP 连接的每一方都有拥塞窗口变量。要求发送方已经发送的但是未被确认的数据量,不要超过拥塞窗口和接收窗口的最小值。
TCP发送方如果发现了“丢包”事件,即出现了超时,或者收到来自接收方的三个冗余ACK,则认为出现了拥塞。
TCP拥塞控制算法:慢启动、拥塞避免、快速重传和快速恢复等算法。

43.文件传输协议
FTP具有把文件从一个主机复制到另一个主机的功能
FTP使用TCP,需要两个连接。一条传输控制信号使用21号TCP端口;另一条数据传输连接,使用20号端口TCP。

44.TCP/IP、Http、Socket的区别
通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,
三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用(程序员层面上)。
  也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。
  关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:
  “我们在传输数据时,可以只使用(传输层)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等等。
“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。
  这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,
  TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”
实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。

45.什么是TCP连接的三次握手
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
  握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
  理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

46.利用Socket建立网络连接的步骤
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
  套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
  1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
  2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。
  为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
  3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。
  而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

47.HTTP链接的特点
  HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
  HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

48.TCP和UDP的区别
 1、TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;
  而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。
  2、也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。
  知道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,
  因为程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,
  即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值