0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux下网络编程

嵌入式威廉希尔官方网站 来源:嵌入式威廉希尔官方网站 作者:嵌入式威廉希尔官方网站 2022-08-26 20:53 次阅读

Linux网络编程

1.TCP/IP简介

TCP/IP协议源于1969年,是针对Internet开发的一种体系结构和协议标准,目的在于解决异种计算机网络的通信问题。使得网络在互联时能为用户提供一种通用、一致的通信服务。是Internet采用的协议标准。

TCP/IP是一组通信协议的代名词,是由一系列协议组成的协议簇。它本身指两个协议集:

TCP(传输控制协议)。

IP(互联网络协议)。

TCP/IP协议的基本传输单位是数据包(Datagram)。

TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定。并且,TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。TCP/IP传输协议是严格来说是一个四层的体系结构,应用层、传输层、网络层和数据链路层都包含其中。

2.TCP/IP协议分层模型

TCP/IP协议族是一组不同层次上的多个协议的组合。TCP/IP通常被认为是一个四层协议系统。

poYBAGMIwi-AHC0OAABCbjmnYwE238.png#pic_center

应用层(Application Layer)

包含各种网络应用协议。如HTTP、FTP、telnet、SMTP、DNS、SNMP等。

传输层(Transport Layer)

负责在源主机和目的主机的应用程序间建立、管理和拆除可靠而又有效的端到端连接 。主要有TCP和UDP两个传输协议。

网络互联层(Internet Layer)

负责将分组独立地从信源传送到信宿,主要解决路由选择、拥塞控制和网络互联等问题。如最重要的协议——IP。

网络接口层(Network Access Layer)

负责将IP分组封装成适合在物理网络上传输的帧格式并传输;或将从物理网络接收到的帧解封,取出IP分组交给网络互联层。当前几乎所有的物理网络上都可运行TCP/IP协议。

3.传输控制协议TCP

TCP协议, 即传输控制协议,是一个可靠的、面向连接的协议。所谓连接,就是两个对等实体为进行数据通信而进行的一种结合。面向连接服务是在数据交换之前,必须先建立连接。当数据交换结束后,则应终止这个连接。面向连接服务具有:连接建立、数据传输和连接释放这三个阶段。在传送数据时是按序传送的。

3.1 TCP数据格式

pYYBAGMIwi-AEfrFAAH0QjScnUk951.png#pic_center

3.2 三次握手

pYYBAGMIwi-AUFL5AAA8j0mimhU637.png#pic_center

第一次握手:

建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。

第二次握手:

服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

第三次握手:

客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

为什么握手是三次, 而不是两次或者四次?

为了保证双方都具备收发能力,则双方都需要发送SYN和ACK,两次握手则只能确一方具备收发能力;三次握手则可刚好可确定双方都是可以进行收发的。

第一次握手是客户端发送 SYN, 服务端接收, 服务端得出客户端的发送能力和服务端的接收能力都正常;

第二次握手是服务端发送 SYN+ACK, 客户端接收, 客户端得出客户端发送接收能力正常, 服务端发送接收能力也都正常, 但是此时服务器并不能确认客户端的接收能力是否正常;

第三次握手客户端发送 ACK, 服务器接收, 服务端才能得出客户端发送接收能力正常,服务端自己发送接收能力也都正常。

3.3 四次挥手

poYBAGMIwjCAMOa5AATbrN2IQR0409.png#pic_center

TCP 一个特别的概念叫作半关闭, 这个概念是说, TCP 的连接是全双工(可以同时发送和接收) 连接, 因此在关闭连接的时候, 必须关闭发送和接收两个方向上的连接。

第一次挥手: 客户端发出释放 FIN=1, 自 己序列号 seq=u, 进入 FIN-WAIT-1 状态。

第二次挥手: 服务器收到客户端的后, 发出 ACK=1 确认标志和客户端的确认号 ack=u+1,自己的序列号 seq=v, 进入 CLOSE-WAIT 状态。

第三次挥手: 客户端收到服务器确认结果后, 进入 FIN-WAIT-2 状态。 此时服务器发送释放 FIN=1 信号, 确认标志 ACK=1, 确认序号 ack=u+1, 自 己序号 seq=w, 服务器进入LAST-ACK(最后确认态)。

第四次挥手: 客户端收到回复后, 发送确认 ACK=1, ack=w+1, 自 己的 seq=u+1, 客户端进入 TIME-WAIT(时间等待) 。 客户端经过 2 个最长报文段寿命后, 客户端 CLOSE;服务器收到确认后, 立刻进入 CLOSE 状态。

为么需要四次挥手

因为为在断开连接时,服务器收到客户端断开请求时可能此时还没有完成数据传输,所以需要先回复客户端我收到你的请求了,等将数据传输完成后,再通知客户开端可以断开连接了,所以服务器需要将应答ack和FIN分两次发送,因此需要四次挥手。

审核编辑 黄昊宇





声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11296

    浏览量

    209357
  • 编程
    +关注

    关注

    88

    文章

    3614

    浏览量

    93696
  • TCP
    TCP
    +关注

    关注

    8

    文章

    1353

    浏览量

    79057
收藏 人收藏

    评论

    相关推荐

    Linux开发_采用线程处理网络请求

    介绍Linux下网络编程、线程编程,select机制,利用子线程响应TCP服务器的请求。
    的头像 发表于 09-17 15:21 840次阅读

    LINUX网络编程

    linux开发编程教程资料——LINUX网络编程,感兴趣的小伙伴们可以看一看。
    发表于 08-23 16:23 0次下载

    Linux下的网络编程总结

    linux开发编程教程资料——Linux下的网络编程总结,感兴趣的小伙伴们可以看一看。
    发表于 08-23 16:23 0次下载

    Linux-socket网络编程

    linux开发编程教程资料——Linux-socket网络编程,感兴趣的小伙伴们可以看一看。
    发表于 08-23 16:23 0次下载

    Linux网络编程

    linux开发编程教程资料——Linux网络编程,感兴趣的小伙伴们可以看一看。
    发表于 08-23 16:23 0次下载

    Linux__C网络编程

    linux开发编程教程资料——Linux__C网络编程,感兴趣的小伙伴们可以看一看。
    发表于 08-23 16:23 0次下载

    linux-网络编程-socket编程

    linux开发编程教程资料——linux-网络编程-socket编程,感兴趣的小伙伴们可以看一看
    发表于 08-23 16:23 0次下载

    Linux网络编程实例详解

    网络通讯教程学习之Linux网络编程实例详解
    发表于 09-01 14:55 0次下载

    LINUX网络编程

    网络通讯教程学习之 LINUX 网络编程
    发表于 09-01 14:55 0次下载

    linux下网卡配置详解

    linux下网卡配置详解
    发表于 12-15 22:38 0次下载

    Linux网络编程

    Linux网络编程
    发表于 10-27 15:31 16次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>网络</b>的<b class='flag-5'>编程</b>

    Linux网络编程

    linux网络编程笔记
    发表于 12-04 14:23 0次下载

    Linux下网络怎样来配置总结

    Linux下网络配置总结
    发表于 11-07 11:35 899次阅读

    Linux下网络编程TCP并发服务器和TCP客户端程序免费下载

    本文档的主要内容详细介绍的是Linux下网络编程TCP并发服务器和TCP客户端程序免费下载
    发表于 01-08 15:12 9次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>下网络</b><b class='flag-5'>编程</b>TCP并发服务器和TCP客户端程序免费下载

    Linux下网络编程-UDP协议探测在线好友

    UDP协议 相对TCP协议来讲属于不可靠协议,UDP协议是广播方式发送数据,没有服务器和客户端的概念。 在Linux下使用socket创建UDP的套接字时,属性要选择数据报类型SOCK_DGRAM。
    的头像 发表于 08-14 09:23 996次阅读