OSI计算机网络7层模型TCP/IP四层网络模型传输层提供应用程序之间的逻辑通信(端到端),以及网络层为主机提供与主机的通信,传输层提供可靠的服务。TCP中常说的握手是:定义连接和建立连接的过程。IP协议是无连接的,而TCP是有连接的。端口:数据链路层依赖mac地址寻址,网络接口层依赖ip地址寻址,传输层依赖端口号寻址。端口是应用层的各种协议进程和传输实体之间进行层间交换的地址。端口号:标识不同进程的编号,16位,2的16次方,只在本地有意义。有三种,一种是保留端口,比如ftp是21、20,dns是53,http是80端口,smtp是25等。第二种是注册端口,第三种是客户端端口号,还有称为临时端口(前两个称为服务器端口)socket:主机ip+端口号,只有ip地址和端口号才能唯一确定一个连接的端口。在网络中唯一标识一个主机中的一个应用进程。udp:用户数据报协议,实现无连接服务、无确认、不可靠传递、低开销、短延迟、无拥塞控制。主要用于实时应用,如ip电话、qq、视频会议等。udp数据报只是ip数据报的一部分。TCP是TransmissionControlProtocol,它实现面向连接的服务,向上提供全双工的可靠逻辑通道,传递可靠,开销大。请注意,TCP的连接通道是合乎逻辑的,对路由器是不可见的。类似于虚电路。tcp连接的三个阶段:建立、传输和释放。连接的终点称为套接字(socket),由通信的唯一两端决定。它采用cs架构(客户端服务器模型)。构建期间发生错误)。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状态,完成三次握手方式握手。通过这样的三次握手,客户端和服务器建立了可靠的双工连接,开始传输数据。但是为什么我们必须执行三次握手来确保连接是双工的呢?不能一次完成吗?不能做两次吗?下面以现实生活中两个人用语言交流来模拟三次握手为例。第一次握手:考试中,甲同学和乙同学是好哥们。这时A想把第一道大题的结果抄在B的卷子上。A悄悄话b,小b,你试卷第一个大题的答案我抄下来,我也想不出来。这时有两种结果:1、如果小b专心回答问题,没有注意a的请求,那么a和b建立通信失败,也就是b收不到来自a的信息,通信一定失败了。2.如果小b听到了a的私信,嗯,说明第一次对话(握手)成功了。说明a同学向b同学提出的要求可以被b同学接受。第二次握手:小b听到a要求抄袭的信息,有两种结果:1.如果b同学很紧张,虽然听到了,但是听到的内容比较模糊,并没有知道a想抄袭哪道题,所以干脆随口说:我也不知道怎么做。这时,a同学一听立马火了,这还能做朋友吗?算我看错你了!那么,a和b之间的通信失败了。解释b当学生无法做出正确的回答时,交流失败。2、如果b同学听到并理解了a同学的抄袭要求,那么b同学会答对并告诉a第一道大题的结果,ab兄弟情深意重,B同学也怕自己做不到抄A。问:a,你抄了吗?那么就相当于第二次握手成功了。前两次对话(握手)证明了学生b能够听到并理解学生a所说的话,并且能够对学生a的要求做出正确的回应。接下来,进行第三次握手。第三次握手:a从b同学那里得到了正确的反馈,此时有两种结果:1.如果a同学很高兴,马上开始抄!A刚得意忘形,抄得飞快,没注意b同学的***句,“你煮了吗?”』,让小B等了几分钟回复。b很失望,心里说:好吧你,你抄了,把我忘了,好吧,我不管你了,***ab还是联系不上。说明当a同学无法回复b同学时,ab沟通失败。2、如果a同学注意到了b同学的反馈和反问,那么a同学对b同学说:我抄了。那么ab的第三次握手就成功了,ab建立了愉快顺畅的沟通渠道,然后a和b就可以继续愉快的传递答案了。通过第二次和第三次握手,证明a同学能听清楚b同学说的话,a同学能对此给出正确的反馈。可见,如果ab要进行有效愉快的沟通,那么三次握手过程是必不可少的。同理,为什么TCP需要进行三次握手,可以用同样的方式来理解:其实就是为了让双方的请求都得到认可,所以按理说至少三次。为了保证服务器能够接收到客户端的信息并做出正确的响应,进行了前两次(firstandsecond)握手,为了保证客户端能够接收到服务器的信息并做出正确的响应.接下来的两次(第二次和第三次)握手是为响应执行的。
