tcp/ip协议学习 -- TCP协议

一. 分层模型

tcp/ip 是一个庞大得协议族,是众多协议的集合,包括 dns http mqtt tcp udp ip等,将这些协议划分为不同层次。

协议层报文间的封装与拆封

封装:应用数据沿着协议栈 ,从tcp ip 以太网驱动驱动传递,在传递过程中,会一次加上tcp,ip,以太网头部信息,也就是封装。

拆封:当设备网卡接收到一个数据包时,会通知tcp/ip内核,会将其从缓存中取出,并逐层解析数据包中头部信息,最终将数据传到应用程序。

二. TCP协议

tcp协议是为应用层提供可靠的,面向连接,基于流的一种传输服务。

tcp特性:

1.连接机制:在发送前,双方必须建立连接,必须有双方的ip和端口。

2.确认和重传:1发送給2数据后,2会发送给1的一个接收的结果,1必须等待该结果,如果超过时间没有收到通知,1就会重传。

3.缓冲机制:tcp提供一个缓冲机制,当数据过小时,tcp会将其存储到缓冲中,当数据足够时才能发送,此外发送完也不会立即删除数据,而是等到接收方确认收到的通知。

4.全双工通信:双方是对等的,能够互传。

5.流量控制:发送速率和读取速率不匹配,发送方会通知接收窗口来实时调整发送速度。

6.差错机制:通过校验和的方式来验证数据的有效性.

7.拥塞机制:当数据从一个大的管道(如一个快速局域网)向一个较小的管道(如一 个较慢的广域网)发送时便会发生拥塞。tcp会降低发送方的发送速度。

tcp报文结构:

tcp报文分为首部+数据区域

1. 源端口和目标端口结合ip协议中的双方ip地址就是整个tcp所需要ip和端口号。

2. 序号用来标志数据字节流区域。其值为数据中的第一个字节的位置,后根据数据区域的长度,就可以推断出整个字节流的区域。

3. 确认序号:用于指示发送方期望接收下一个字节的序号。

4. 首部长度:占据4bit空间,用以表示报文首部长度。

5. 标志位:URG:  有无紧急数据

                   ACK:  确认序号中的值是否有效

                   PSH:  指示接收方接收数据后是立即发给应用程序,而不是在缓冲区等待。

                   RST:  重置连接

                   SYN: 用于建立连接

                   FIN:  用于关闭连接

6. 窗口大小:之前聊过流量控制的接收窗口。

7. 校验和:验证数据完整性

8. 紧急指针,只有urg 标志位为1,才有效,指向紧急数据的末尾位置。

tcp协议通信双方必须先建立起tcp连接,当结束通信,关闭连接。

三次握手,四次挥手

三次喔手  :当服务端与客户端建立连接时,需要双方总共发送3个包。

客户端将syn标志位为设为1,并产生随机值seq,并将数据包发送给server,之后处于等待位。

服务端接受后,通过syn标志位知道客户端请求连接,将syn和ack只为1,产生一个随机seq值,将数据包发送给client ,之后等待位。

客户端收到数据包,检查ack是否为1,如果正确则将ack标志位值位1,再次发送给服务端,服务端再次检查该标志位,如果为1,则正式建立起连接。

四次挥手:tcp连接删除时,需要发送4个包。服务端和客户端均可发起挥手动作,在socket编程中,双方均可利用close来关闭。

二. udp协议 与socket

udp协议和tcp相反,会应用层提供一种不可靠,无连接,基于数据报的传输服务。

socket 是一种文件描述符,linux网络编程通过socket接口实现。

套接字类型: 

我们一般使用sockaddr_in 结构体来填入服务端以及客户端的ip 端口 地址族等信息

三. TCP与udp  编程步骤

tcp 服务端

1. 创建一个套接字 socket

2. 将服务器的ip 端口号,用bind函数绑定

3. listen()函数 设置监听队列,允许最大的连接数

4. accept函数,允许哪个ip 端口的客户端,能连接上来

5. 收发数据 read/recv   or  read/write

6. 关闭连接

tcp 客户端

1. 创建一个套接字 socket()

2.设定要去连接的服务器ip端口等,再用connect()连接

3.收发数据

4.关闭连接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值