TCP的服务

TCP为应用层提供一种面向连接的、可靠的字节流服务。

一个TCP连接中,仅有两方进行彼此通信,所以广播和多播不能用于TCP。

TCP通过以下方式提供可靠性:

  1. 应用数据被切割为TCP认为最适合发送的数据块。由TCP传递给IP的信息单位称为报文段或段。
  2. TCP发出一个段后启动一个定时器,用以等待目的端确认收到该报文段,如果没有及时收到一个确认响应,将重发该报文段。
  3. 当TCP收到发自TCP连接另一端的数据将会发送一个确认,这个确认不是立即发送,而是会进行一点延迟。
  4. TCP将保持首部和数据的检验和。目的是检验数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将会丢弃报文段和不确认收到此报文段,发送端将会重发该报文段。
  5. 如有必要,TCP将会对收到的数据进行重新排序,并将收到的数据以正确的顺序交给应用层。
  6. TCP接收端会自动丢弃重复的数据。
  7. TCP提供流量控制。

TCP的首部

TCP数据被封装在一个IP数据报中:

TCP包首部图:

TCP首部中有6个标志比特,简单介绍其用法:

  • URG:紧急指针有效;
  • ACK:确认序号有效;
  • PSH:接收方应该尽快将此报文段交给应用层;
  • RST:重建连接;
  • SYN:同步序号用来发起一个连接;
  • FIN:发送端完成发送任务;

TCP首部通常大小为20个字节。

当建立一个新连接时,SYN标志变为1.序号字段包含由该主机选择的该连接的初始序号ISN。该主机将会发送的第一个字节需要就为此ISN加一,因为SYN标志消耗了一个序号。

每一个传输的字节都被计数,确认序号包含发送的一端所确认的一端所期望收到的下一个序号。确认序号是上次已经成功收到的数据字节序号加一。只有ACK标志为1时确认序号字段才有效。

TCP可以看做一个没有选择确认或否认的滑窗协议,TCP首部中的确认序号表示发送方已经成功收到字节,不包含确认序号所指字节

TCP/IP详解 读书笔记:TCP:传输控制协议的更多相关文章

  1. TCP/IP详解 读书笔记(一):概述

    分层 网络协议通常分不同层次进行开发,每一层负责不同的职责,一个协议簇指的是一组不同层次上的多个协议的组合. TCP/IP通常被认为是一个四层协议系统: 链路层:主要是处理与电缆或其他传输媒介的物理接 ...

  2. TCP/IP详解学习笔记 这位仁兄写得太好了

      TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...

  3. TCP/IP详解学习笔记- 概述

    TCP/IP详解学习笔记(1)-- 概述1.TCP/IP的分层结构      网络协议通常分不同层次进行开发,每一层分别负责不同的同信功能.TCP/IP通常被认为是一个四层协议系统.      如图所 ...

  4. TCP/IP详解学习笔记 这位仁兄写得太好了.(转载)

    TCP/IP详解学习笔记   这位仁兄写得太好了   TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/20444 ...

  5. 【转】TCP/IP详解学习笔记(二)

    TCP/IP详解学习笔记(5)-IP选路,动态选路,和一些细节 1.静态IP选路 1.1.一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据 ...

  6. 【转】TCP/IP详解学习笔记(一)

      TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/204448.aspx TCP/IP详解学习笔记(13)-T ...

  7. TCP/IP详解学习笔记

    TCP/IP详解学习笔记(1)-基本概念 TCP/IP详解学习笔记(2)-数据链路层 TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 TCP/IP详解学习笔记(4)-ICMP协议, ...

  8. TCP/IP详解学习笔记(9)-TCP协议概述

    终于看到了TCP协议,这是TCP/IP详解里面最重要也是最精彩的部分,要花大力气来读.前面的TFTP和BOOTP都是一些简单的协议,就不写笔记了,写起来也没啥东西. TCP和UDP处在同一层---运输 ...

  9. TCP/IP详解学习笔记(3)-- IP:网际协议

    1.概述      IP是TCP/IP协议族中最为核心的协议.所有的TCP,UDP,ICMP,IGMP数据都以IP数据报格式传输.      IP提供不可靠,无连接的数据报传送服务. 不可靠:它不能保 ...

随机推荐

  1. 修正了Model1模式,进入如今盛行的的Model2模式,也就是MVC模式

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513668601843548675/ 1.<JSP页面实际上就是Servlet> 2.<JSP页 ...

  2. 超详细的编码实战,让你的springboot应用识别图片中的行人、汽车、狗子、喵星人(JavaCV+YOLO4)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. 以太 ip tcp udp 三次握手的理解

    以太帧: 1.前导码(7字节):使接收器建立比特同步. 2.起始定界符SFD(1字节):指示一帧的开始. 3.目的地址DA(6字节):指出要接收该帧的工作站. 4.源地址SA(6字节):指示发送该帧的 ...

  4. redis 入门使用

     一.Redis 数据类型及结构特点 Redis 最常见的5中数据结构有 String(字符串),List(列表),Set(集合),Hash(散列),Sorted Sets (有序集合),下表简单总结 ...

  5. 新手学习Java,如何快速从入门到精通!

    首先我要给你说的是,任何一个东西从零到精通,都是需要一个过程的,就相当于我们在小学的时候学乘法口诀表,背文言文一样,都是需要我们慢慢的去渡过这个阶段,我们才能慢慢的掌握,其次,毕竟这是一门编程语言,你 ...

  6. 【刷题-LeetCode】152 Maximum Product Subarray

    Maximum Product Subarray Given an integer array nums, find the contiguous subarray within an array ( ...

  7. rsync.sh

    #!/bin/bash file1=`du -sm /var/www/vhosts/|awk '{print $1}'` ps=`ps -C rsync --no-header|wc -l` if [ ...

  8. Python打印JSON中中文的解决办法

    code #!/usr/bin/python # encoding=utf-8 import json data = [{"a": "中文"}] print j ...

  9. java中的继承 和多态。

    package com.aaa.zxf.ajax.test; /** *一. java 中的继承和多态. * * 继承的特性? * 1.实现继承的方式 * A 如何建立继承关系(一个类继承于 另一个类 ...

  10. shiro 框架之 加密处理。

    一.shiro 加密? /* Shiro? 一.为什么要加密? 为调高数据库的安全性,需要给密码加密. 二.常见的加密算法? 1.1哈希算法 md5:加密算法 哈希函数 1.2.对称算法 1.3.非对 ...