引用自:http://www.cnblogs.com/yuilin/archive/2011/11/03/2234304.html

TCP/IP协议是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议。

单从TCP/IP协议这个名称看,好多人误以为它是一个协议。其实TCP/IP并不是一个协议,而是一个协议族,这个族里面括很多协议,其中比较主要的是TCP协议和IP协议,所以简称为TCP/IP协议。

TCP/IP协议由4层组成,从下到上分别是,网络接口层,网络层,传输层,应用层

这里有的朋友可能会有疑问,开放系统互联参考模型(OSI)不是有7层么,这个TCP/IP协议怎么只有4层?其实这个是不矛盾的,因为OSI参考模型是一个理论模型,而TCP/IP是在实际应用中产生的。

TCP/IP也遵守OSI,但根据实际情况进行了一些变通,它觉得分成7个层次不够简单高效,有些层次做的事情是可以合并到一个层的。于是TCP/IP将OSI中的应用层、表示层、回话层合并为了应用层

将OSI中的数据链路层、物理层合并为了网络接口层

TCP/IP结构对应OSI结构
TCP/IP OSI
应用层 应用层
表示层
会话层
传输层 传输层
网络层 网络层
网络接口层 数据链路层
物理层

TCP/IP个层包括的协议如下:

网络接口层:

Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM 等。

网络层:

IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向地址转换协议。

传输层:

传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram protocol)

应用层:

TFTP,HTTP,SNMP,FTP,SMTP,DNS,RIP,Telnet

网上有人说TCP/IP是传输层协议,由此可见这句话是错误的。

首先简单介绍一下TCP三次握手

    在TCP/IP协议中,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协议提供可靠的连接服务,采用三次握手建立一个连接。以下步骤概述了通常情况下客户端计算机请求与服务器计算机简历TCP的过程:

TCP三次握手图解

TCP图解3次握手

  • 1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。
  • 2. 服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号y、对客户端的序列号的确认x+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
  • 3. 客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号y+1ACK报文,一个标准的TCP连接完成。

TCP关闭连接,四次握手图解

TCP断开连接-四次握手图解

  • 几点注意事项:
  • 默认情况下,当调用close( or closesocket)时,如果发送缓冲中还有数据,TCP会继续把数据发送完。
  • 发送了FIN只是表示这端不能继续发送数据(应用层不能再调用send发送),但是还可以接收数据。
  • 被动关闭端可能会将ACK和FIN合到一起发送,所以这也算不上严格的四次握手—四个报文段。
  • 应用层如何知道对端关闭?通常,在最简单的阻塞模型中,当你调用recv时,如果返回0,则表示对端
    关闭。在这个时候通常的做法就是也调用close,那么TCP层就发送FIN,继续完成四次握手。
  • 关 闭TCP连接的最后微妙之处在于对Time-Wait状态的需要。TCP规范要求在终止连接时,两端的关闭握手都完成后,至少要有一个套接字在Time- Wait状态保持一段时间。这个要求的提出是由于消息在网络中传输时可能延迟。如果在连接两端都完成了关闭握手后,它们都移除了其底层数据结构,而此时在 同样一对套接字地址之间又立即建立了新的连接,那么前一个连接在网络上传输时延迟的消息就可能在新连接建立后到达。由于其包含了相同的源地址和目的地址, 旧消息就会被错误地认为是属于新连接的,其包含的数据就可能被错误地分配到应用程序中。

 

转载于:https://www.cnblogs.com/langqi250/archive/2012/11/06/2756327.html

理解TCP/IP协议相关推荐

  1. 深入理解TCP/IP协议-TCP建立与终止连接

    转载自  深入理解TCP/IP协议-TCP建立与终止连接 一.引言   TCP 是一个面向连接的协议.无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.连接创建与终止的状态变化图如下: ...

  2. 深入理解TCP/IP协议族

    TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层.网络层.传输层和应用层.每一层完成不同的功能, 且通过若干协议来实现,上层协议使用下层协议提供的服务. MAC地址,处于数据链路层. I ...

  3. 通俗理解TCP/IP协议三次握手与四次分手流程

    三次握手流程 客户端发个请求"开门呐,我要进来"给服务器 服务器发个"进来吧,我去给你开门"给客户端 客户端有很客气的发个"谢谢,我要进来了" ...

  4. wireshark的使用教程--用实践的方式帮助我们理解TCP/IP中的各个协议是如何工作的

     wireshark的使用教程 --用实践的方式帮助我们理解TCP/IP中的各个协议是如何工作的 wireshark是一款抓包软件,比较易用,在平常可以利用它抓包,分析协议或者监控网络,是一个比较好的 ...

  5. 深入理解网络通信与tcp/ip协议

    计算机网络发展简史 1.诞生阶段,20世纪60年代中期之前的第一代计算机网络是以单个计算机为中心的远程联机系统. 2.ARPANET,多个主机通过通信线路互联起来.60年代初.当时,美国国防部为了保证 ...

  6. 简单理解TCP/IP传输层协议TCP和UDP

    TCP/IP模型中的传输层主要负责端到端通信,和数据链路层类似,数据链路层负责点到点的通信.TCP/IP模型的传输层主要协议有TCP (Transmission Control Protocol,传输 ...

  7. 厉害了,不能错过,大神关于TCP/IP 协议的理解分享(网络协议篇一)

    本篇文章篇幅比较长,先来个思维导图预览一下. 本篇文章篇幅比较长,先来个思维导图预览一下. 一张图带你看完本篇文章 一.概述 1.计算机网络体系结构分层 计算机网络体系结构分层 2.TCP/IP 通信 ...

  8. TCP/IP 协议理解

    TCP/IP 协议(Transmission Control Protocol / internet Protocol),因特网互联协议,又名网络通讯协议.通俗而言:TCP负责发现传输的问题,一有问题 ...

  9. TCP/IP协议 TCP包深入理解

    详细解释TCP/IP标志位 TCP报格式 继续使用TCP/IP协议 TCP浅析中抓到的包进行分析. no Time Source Destination protocal Length info 3 ...

最新文章

  1. 想避免重复请求/并发请求?这样处理才足够优雅
  2. Java迭代器ListIterator
  3. Ubuntu20.04安裝QQ for Linux
  4. 【编程题目】输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。...
  5. postfix文档修正
  6. opencv中的一些陷阱 坑死我了~~~~(_)~~~~
  7. Oracle复习(知识点、练习题、实验)
  8. 截取屏幕并保存为BMP文件
  9. You are running Vue in development mode.Make sure to turn on production mode when deploying for p...
  10. gms2游戏移植linux,GMS卡刷包制作
  11. java基础--枚举的运用
  12. 一个程序员未来5年的规划
  13. (01)开发环境准备
  14. 异步多线程之入门必知
  15. python打印皮卡丘步骤_编程作战丨如何利用python绘制可爱皮卡丘?
  16. 蓝屏解决办法,及介绍。(装逼或学习)
  17. ADuC7026简单开发过程
  18. java轮盘赌_轮盘赌算法
  19. PCB设计1 模块间的隔离
  20. i=i+1 与 i+=1 区别

热门文章

  1. 【数据库】使用PLSQL工具时,ORACLE客户端连接串的配置
  2. tcc-transation源码分析与思考
  3. IEEE 物联网相关的标准
  4. github 使用之--ssh配置(及解决ssh_add 报错)
  5. Memcached原理与应用
  6. 【2-SAT】URAL - 2089 - Experienced coach
  7. HTTPS 使用成本
  8. 好的安排小明(南阳19)(DFS)
  9. 将相同值的行内容进行合并操作--Sql2005
  10. C++ 模板实例化与调用