应用层协议目的是了解指定协议的实现便于我们以后使用
传输层:负责应用程序之间的数据传输—TCP/UDP
了解协议的实现,体会协议的特性,理解对于上层程序编程的影响

UDP:
协议实现:
16源端-对端端口:用于描述识别通信两端进程
16位数据包长度:能够存储最大数字65535—udp报文总大小最大不能超过64K
16位校验和:采用二进制反码求和算法—校验接收方接收到的数据与发送方发送的数据是否一致。
协议特性:
无连接 :通信是不需要建立连接,只要知道对方地址就可以直接发送数据
不可靠:不保证数据安全、有序到达对端。
面向数据报:无连接的,不可靠的,无序的,有最大长度限制的传输方式
Udp传输时,sendto发送的数据会被放到发送缓冲区,而udp协议并不会等待,而是直接对数据封装头部,进行发送。
2.udp传输时,收到的数据会被放到接收缓冲区中,而udp保证数据是整条交付,不会出现半条或多条交付
编程影响:

  1. 不保证安全到达:需要在应用层使用tcp所使用的一些机制实现
  2. 不保证有序到达:需要在应用层进行包序管理
  3. Udp报文有最大长度限制:报文最大铲毒小于64K,因此发送大块数据的时候,需在应用层进行数据分包进行发送
  4. Udp实现的是整条交付:因此接收方必须定义的缓冲区足够大,能够一次性取出一条数据。

TCP协议:
协议实现:
协议特性:面向连接,可靠传输,面向字节流
面向连接:连接管理+状态管理

  1. 为什么握手是三次,而挥手是四次?
    两次不安全,四次没必要
    Tcp是一个全双工通信,两端都必须确认对方是否具有数据收发的能力
    Fin包只能表示对方不再发送数据了,不代表对方不再接收数据,因此有可能被动关闭方还会继续发送数据,因此这种情况下就不能直接发送fin包,而是等待上层用户不再发送数据了,调用close或者shutdown才会发送fin
    因此被动关闭方的ack和fin并不是一起发送的
  2. 三次握手失败了,两端是如何处理的?
    服务端回复ack+syn后,如果超时得不到ack回复,则会发送rst重置连接报文,然后释放新建套接字。
  3. TIEM_WAIT有什么用?
    TIME_WAIT是主动关闭方在进行断开连接过程中进行最后一次ack回复后进入的状态。
    如果主动关闭防回复最后一次ack后直接释放资源,就有可能在新的客户端中使用原来的这个地址信息,而如果上次ack丢失的情况下会重传fin,则新客户端收到重传的fin对新连接造成影响,以及发送syn也会受到影响。

Time_wait更多地是为了保护客户端启动不会使用钢管逼的套接字地址信息,而受到上个套接字的通信遗留问题影响

Time_wait等待2个msl时间之后,释放资源,等待两个msl是为了保证能够对重传的fin进行处理,以及保证本次通信的所有数据都消失在网络中不会对新的连接造成影响。

  1. 一台主机上出现了大量的time_wait是什么原因?如何解决?
    Time_wait是套接字主动关闭连接,最终所进入的状态,因此一台主机出现大量time_wait意味着大量的主动关闭了套接字
    解决:
  2. 减少time_wait等待时间
  3. 使用套接字选项:地址复用
    Int setsockopt(int fd,int level,int optname,void* optval,int optlen)
    Level:SOL_SOCKET
    Optname:SO_REUSEADDR—地址重用
  4. 一台主机上出现了大量的CLOSE_WAIT是什么原因?如何解决?
    Close_wait是被动关闭方,在收到fin包进行ack回复之后所进入的状态
    这个状态是一个等待上层用户调用close/shutdown(wr)后发送fin包的一个状态
    如果主机上出现了大量的close_wait的连接,那么意味着可能在代码中我们没有关闭套接字。
    解决:
    使用close/shutdown(wr)关闭套接字

TCP协议 握手与挥手相关推荐

  1. TCP协议-握手与挥手

    认识TCP协议 TCP全称为"传输控制协议",这是传输层的一个协议,对数据的传输进行一个详细的控制.  特点: 面向字节流 安全可靠 面向连接 TCP协议段格式 源端口号与目的端口 ...

  2. TCP协议三步挥手与四步挥手

    关于TCP协议 TCP(Transmission Control Protocol, 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.与之对应的是UDP(User Datagram ...

  3. TCP协议握手过程,以及为什么握手,不握手又会怎么样?

    1. 为什么要用三次握手 在<计算机网络>一书中其中有提到,三次握手的目的是"为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误",这种情况是:一端(cli ...

  4. java网络篇-tcp的握手和挥手!

    package com.wql.test; public class Test6 { public static void main(String[] args) { test1(ErrorType. ...

  5. 计网 - 传输层协议 TCP:TCP 为什么握手是 3 次、挥手是 4 次?

    文章目录 Pre TCP 协议 主机到主机(Host-To-Host) 什么是连接和会话? 双工/单工问题 什么是可靠性? TCP 的握手和挥手 TCP 协议的基本操作 建立连接的过程(3次握手) 断 ...

  6. TCP协议之三次握手与四次挥手

    TCP协议是TCP/IP体系中核心一个协议,该协议比起IP协议,ICMP协议,UDP协议都更复杂,因此这篇文章主要分析TCP协议在建立连接和断开连接的时候,状态转移以及报文段的内容. 下面,先放一张T ...

  7. TCP协议三次握手及四次挥手

    文章目录 TCP 三次握手 第一次握手(SYN=1, seq=x) 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1) 第三次握手(ACK=1,ACKnum=y+1) 为什么 ...

  8. TCP协议连接的11种状态浅谈

    了解TCP的协议可以在很大程度上帮助我们分析服务器当前的TCP连接状态,同时也是排查一些网络故障的基础,首先来看一下TCP协议的三次握手与四次断开. TCP协议三次握手   1.客户端首先发起连接,也 ...

  9. 计算机网络——TCP 协议原理总结

    目录 1.网络是不可靠的 2.TCP 概念和特点 3.可靠传输机制 1.一问一答的方式 2.流水线传输的方式 1.回退 N 重传 2.选择重传 4.TCP 滑动窗口机制 数据包序号 确认号和累计确认 ...

最新文章

  1. Electron的代码调试
  2. tf.nn.sparse_softmax_cross_entropy_with_logits()与tf.nn.softmax_cross_entropy_with_logits的差别
  3. 小程序 省市区县三级联动选择器(caseCade)
  4. long long or int
  5. Batch Normalization论文笔记
  6. Netty工作笔记0074---handler链调用机制实例1
  7. 凸包板子试炼(玄学过题)
  8. httpd-2.4实现虚拟主机、访问控制及https功能
  9. NodeJS下安装Express的小问题
  10. 车牌识别opencv_基于OpenCV 的车牌识别
  11. 计算机c盘满了怎么搬家,c盘满了怎么办 c盘怎么搬家【搬家步骤】
  12. 归并算法(详细见解)
  13. Windows 下载安装 Seata
  14. MDC300的ADSFI框架介绍
  15. 网页飘窗效果,jsp页面飘窗浮窗,html飘窗浮窗,点叉号关闭飘窗
  16. 站长统计工具区别:百度统计、51la统计系统和cnzz数据统计工具
  17. Failed to load language: zh-CN from的解决办法
  18. 对c语言课程的建议和意见,对课程的意见和建议
  19. 制造业增值税从16%下降到13%,我们是否应该降价出售?
  20. Linux虚拟声卡有吱吱声,解决Win7+8系统爆音有杂音吱吱声

热门文章

  1. 动态规划最好的讲解之一 | 算法干货
  2. Google Capture The Flag 2019 (Quals) WP
  3. 程序员和黑客的十大本质区别
  4. 安全研究 # 课题:二进制成分分析(Binary SCA)
  5. 马士兵Python基础版2020教程P58-P96 PPT笔记+课堂代码
  6. 弘辽科技:回首京东发展史,为占下沉市场,刘强东重出江湖
  7. 从0到1搭建电商营销数据分析平台(六)——聊聊反作弊
  8. 2017年最火的19个行业,你做哪行!
  9. 人人网陈一舟:创业18年,我领悟的五点心得
  10. 华为手机左侧快捷方式_华为手机的这六个快捷键,让使用更简便!