1 TCP的服务

尽管TCP和UDP都使用相同的网络层(IP),TCP却向用户提供一种面向连接的,可靠地字节流服务。两个使用TCP的应用,在彼此交换数据之前必须先建立一个TCP连接,在一个TCP连接中,仅有两方进行通信。TCP通过以下方式来提供可靠性:

(1)应用数据被分割成TCP认为最合适发送的数据块。

(2)当TCP发送一个段后它启动一个定时器,等待目的端确认收到这个报文段(超时重传)。

(3)当TCP收到发自TCP连接另一端的数据,它将发送一个确认。

(4)TCP将保持它首部和数据的检验和(端到端)。

(5)TCP报文段通过IP数据传输,可能出现失序,因此TCP会对收到的数据进行重新排序,将收到的正确顺序交给应用层。

(6)TCP将丢弃重复的数据

(7)TCP还能提供流量控制。TCP的接收端只允许另一发送接收端缓冲区所能接纳的数据,防止缓存区溢出。

另外TCP不提供对字节流的解释,对字节流的解释由TCP连接双方的应用层解释。

2 TCP首部

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

TCP首部格式。如果不计算任选字段,通常是20个字节。

源端和目的端端口号:用于寻找发送端和接收端的应用进程。这2个值加上IP首部中的源端和目的端的IP地址构成唯一的确定的一个TCP连接。

序号:用来标示从TCP发送端到接收端发送的数据字节流,表示在这个报文段中的第一个数据字节(无符号数,到达2^32-1后又从0开始)当建立一个TCP新的连接时,SYN标志变1。序号字段包含由这个主机选择的该连接的初始序号ISN,该主机要发送数据的第一个字节序号为这个ISN加1,因为SYN标志需要消耗一个序号。每个传输的字节都被计数,确认序号包含发送端确认的一端所期望手下的下一个序号。因此确认序号应该上次成功收到的数据字节序号加1。只有ACK标志为1的确认序号字段才有效。

首部长度:占四位,表示首部长度为多少个4字节,因此首部最大为60字节

六个标志比特:

URG:紧急指针有效

ACK:确认序号有效

PSH:接收方应该尽快将这个报文交给应用层。

RST:重建连接

SYN:同步序号用来发起一个连接。

FIN:发送端完成发送任务

窗口大小:16位,最大65535字节。TCP的流量控制由每一端通过申明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值正是接收端期望接收的字节。

检验和:覆盖整个TCP报文段,发送端计算,接收端验证(需要加上伪首部)。

TCP/IP学习笔记:TCP传输控制协议(一)的更多相关文章

  1. tcp/ip学习笔记-TCP

    tcp/ip学习笔记-TCP 彭会锋 报文发送采用的是tcp_output函数,

  2. TCP/IP 中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议

    原文地址:http://hi.baidu.com/albyuyrgqgbbhoq/item/65006d2d002ab33195f62ba1 TCP/IP(Transmission Control P ...

  3. TCP/IP学习笔记1--概述,分组交换协议

    1.TCP/IP 互联网是由许多独立发展的网络通信技术融合而成的,能够使它们不断融合并实现统一的正式TCP/IP技术,TCP/IP使通信协议的统称. TCP/IP协议模型(Transmission C ...

  4. TCP/IP学习笔记2--协议分层与OSI参考模型

    协议的分层: 为解决不同计算机之间的通信,ISO(International Organization for Standards)指定了一个国际标准OSI(Open Systems Intercon ...

  5. TCP/IP学习笔记(3)-IP、ARP、RARP协议

    这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数据 ...

  6. TCP/IP学习笔记(5)------IP选路

    静态IP选路 一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由.这里就不重复了.首先来看看一个简单的系统路由表. D ...

  7. TCP/IP学习笔记(3)----IP,ARP,RARP协议

    把这三个协议放到一起学习是因为这三个协议处于同一层(网络层协议),ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP ...

  8. TCP/IP学习笔记17--TCP-- 窗口控制 重发控制 流控制

    事业无穷年 -- 韩愈 利用窗口控制提高速度: TCP传输数据是,以一个段为单位(每次发送一个数据包),每发一个段需要一次确认应答,这样就难免存在这样的缺点:包的往返时间越长,通信性能就越低. 为解决 ...

  9. TCP/IP学习笔记(2)-数据链路层

    数据链路层有三个目的: 为IP模块发送和接收IP数据报. 为ARP模块发送ARP请求和接收ARP应答. 为RARP发送RARP请求和接收RARP应答 ip大家都听说过.至于ARP和RARP,ARP叫做 ...

随机推荐

  1. Httpclient post请求

    CloseableHttpClient httpclient = HttpClients.createDefault(); String url = "https://ml.yiche.co ...

  2. 【Python】excel读写操作 xlrd & xlwt

    xlrd ■ xlrd xlrd模块用于读取excel文件内容 基本用法: workbook = xlrd.open_workbook('文件路径') workbook.sheet_names() # ...

  3. 大数据 --> 安装Hadoop-单机模式(1)

    安装Hadoop-单机模式(1) 一.在Ubuntu下创建hadoop组和hadoop用户 1)创建hadoop用户组 sudo addgroup hadoop //添加用户组 2)创建hadoop用 ...

  4. Angular开发实践(六):服务端渲染

    Angular Universal Angular在服务端渲染方面提供一套前后端同构解决方案,它就是 Angular Universal(统一平台),一项在服务端运行 Angular 应用的技术. 标 ...

  5. [bzoj1355][Baltic2009]Radio Transmission_KMP

    Radio Transmissio bzoj-1355 Description 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. Inp ...

  6. ConcurrentHashMap 源码分析

    ConcurrentHashMap 源码分析 1. 前言    终于到这个类了,其实在前面很过很多次这个类,因为这个类代码量比较大,并且涉及到并发的问题,还有一点就是这个代码有些真的晦涩,不好懂.前前 ...

  7. Java基础学习笔记五 Java基础语法之面向对象

    面向对象 理解什么是面向过程.面向对象 面向过程与面向对象都是我们编程中,编写程序的一种思维方式.面向过程的程序设计方式,是遇到一件事时,思考“我该怎么做”,然后一步步实现的过程.例如:公司打扫卫生( ...

  8. 【RabbitMQ系列】 Spring mvc整合RabbitMQ

    一.linux下安装rabbitmq 1.安装erlang环境 wget http://erlang.org/download/otp_src_18.2.1.tar.gz tar xvfz otp_s ...

  9. PTA常见错误

    1.最常犯的错误. 格式错误 在PTA程序检测中,输入输出要严格按照题目要求.输出的格式要完全按照题目要求来,该空格地方空格,该换行要换行.否则,就算你运行结果是对的,PTA还是提示你格式错误 比如下 ...

  10. Alpha集合

    项目名称:城市安全风险管控系统 小组成员: 张梨贤.林静.周静平.黄腾飞 Alpha冲刺随笔 Alpha冲刺Day1 Alpha冲刺Day2 Alpha冲刺Day3 Alpha冲刺Day4 Alpha ...