TCP协议可以说已经是IT人耳熟能详的协议,最近在学习socket网络编程时后重新温习一下这个协议,针对一些问题做了一些总结,很多理解可能还不是很准确。

1. 协议是什么?所谓的各种网络协议无非是一种通信标准,就好象两个人要说话,那么我们首先得规定一种语言,是中文还是英文,这样大家才能在接下来的交流中进行顺利的沟通。至于标准的实现是和代码操作系统无关的,具体从逻辑上怎么实现这个协议就是自己操作了,只要遵守协议标准,大家就能顺利的进行通信/交流。

2. 为什么会有协议分层?OSI有七层协议(实际通用操作系统用的五层系统),电信通信网络协议也有多层。以前读书时候总是去背。其实这种问题可以反过来想,如果只有一层,会怎么样,或者我们自己去设计,应该设计几层?首先假设协议不分层,大家可以想象把几层合并在一起会怎么样,那我们可能只是做一个简单的应用层程序,那可能会完成大量的接口通信工作,还得自己去写或者调用路由层,传输层方法,甚至更多。由于有了分层的概念,那么我们每一层有自己相对独立的功能,例如寻找IP地址就交给IP层去完成了。这样大大提高了大家工作效率,每一层开发人员除了关注自己本身功能的开发,只用去关心接口问题了。就好象操作系统同样有分层,驱动,操作系统,应用层。

3.为什么有传输层?同样的逆向方法,如果没有TCP/IP层,应用层程序怎么进行网络通信?我们能够通过IP找到目标,但是却没有办法确定要和那个应用程序通信,或者说没有办法确定和那个进程/线程通信。通过IP+port的方式可以方便的确定要通信的进程。

4. 如何理解协议不同字段对应功能?通过一个wireshark工具的截图我们可以很清楚的看到一个协议其实就是一段编码,至于不同字段功能可以理解在协议设计时候根据设计需求对字段进行分段,并且有严格标准。例如第一个字段(由于是16进制编码,实际是2 bytes)是source port(源端口),他的值是22(十六进制也就是16),也是通用的端口。我们在应用程序编程时候会避开这些通用端口。通过这个我们也可以算出port的范围应该是0~65535(2^16-1)。后表面的一串便面含义我们这可以去查阅相关的协议。

5.什么是TCP中的面向连接?通信中的所谓建立的面向连接,不是真的能建立起一个通道,然后再进行数据传输。对于下层的消息协议来说,都是分段打的包。无非是短时间内两个进程需要在网络上进行高速有效的通信,理解为面向连接的通信。如何才能保证高效有效的通信,除了光知道IP地址肯定不行,还需要一系列的机制来保证这个通信。为了知道对方更多的信息以及双方约定一些通信规则,于是在正式传送前肯定需要一个通信,双方约定一些通信规则,这个通信过程可以理解成连接的建立。通信活动结束后,不能让进程还占着资源啊,所以还的释放,这个可以理解成连接的释放或者断开。

6. 什么是socket 编程?因为底层和传输层通常已经封装在驱动程序和操作系统里面了,我们再上层应用程序编程编程时候不必再去重写像TCP/UDP这一类传输层的东西,当然也可以去修改。上层应用程序只需要调用一些方法就可以完成网络通信,在Unix一类的由c语言构成的操作系统来说,一般封装在socket的方法里。在这个基础上进行的网络编程称为套接字编程。

关于网络协议和socket编程基本概念的更多相关文章

  1. C语言小项目-基于TCP协议和SOCKET编程的网络通信系统

    1.1 功能结构图   网络通信系统一共由4个模块组成,分别是点对点客户端.点对点服务端.服务器中转服务端.服务器中转客户端.这4个模块是成对使用的,点对点客户端和点对点服务端一起使用,服务器中转服务 ...

  2. 四层协议和Socket编程

    <四层协议图> <Soclet编程模型图>

  3. TCP协议和socket API 学习笔记

    本文转载至 http://blog.chinaunix.net/uid-16979052-id-3350958.html 分类:  原文地址:TCP协议和socket API 学习笔记 作者:gilb ...

  4. 网络协议 11 - Socket 编程(下):眼见为实耳听为虚

    系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...

  5. Http TCP/IP协议和socket之间的区别和联系

    总结,TCP/IP是传输层协议,主要解决数据如何在网路中传输,socket是TCP/IP协议的具体实现,是对TCP/IP协议的封装和应用,属于程序员层面,HTTP是应用层协议,应用层协议很多,类似的像 ...

  6. TCP/IP协议和socket

    1.传输层基于tcp协议的三次握手和四次挥手? 传输层有两种数据传输协议,分别为TCP协议和UDP协议,其中TCP协议为可靠传输,数据包没有长度设置,理论可以无限长,而UDP协议为不可靠传输,报头一共 ...

  7. java网络编程之Socket编程

    概念 网络编程分为BIO(传统IO).NIO.AIO.Socket编程属于BIO这种传统IO. InetAddress java.net.InetAddress是JAVA中管理IP地址的类,常用 pu ...

  8. linux网络编程之socket编程(一)

    今天开始,继续来学习linux编程,这次主要是研究下linux下的网络编程,而网络编程中最基本的需从socket编程开始,下面正式开始学习: 什么是socket: 在学习套接口之前,先要回顾一下Tcp ...

  9. 网络协议 10 - Socket 编程(上):实践是检验真理的唯一标准

    系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网 ...

随机推荐

  1. ./configure : /bin/sh^M : bad interpreter

    用命令行来编译Qt的时候发生标题尚的错误. 原因是文件中带有DOS行结束符,必须把它转换成UNix结束符 references: http://stackoverflow.com/questions/ ...

  2. Android 设置 横屏 竖屏

    方法一:在AndroidManifest.xml中配置 如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上androi ...

  3. STL中map与hash_map容器的选择收藏

    这篇文章来自我今天碰到的一个问题,一个朋友问我使用map和hash_map的效率问题,虽然我也了解一些,但是我不敢直接告诉朋友,因为我怕我说错了,通过我查询一些帖子,我这里做一个总结!内容分别来自al ...

  4. cf475A Bayan Bus

    A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  5. Unity 编辑器扩展自定义窗体

    这次看见Unity还可以自定义弹出窗体,让我很好奇.于是就去网上找文章看了看. 如果想自定义窗体需要把类放入Editor文件夹下面. 代码如下: using UnityEngine; using Un ...

  6. Unity 2DSprite

    Unity官方意识到在4.3版本之前,并没有自带的支持2D游戏工具,商店里面有很多有名2D插件Uni2D,2DToolkit,在4.3版本之后就出现UISprite精灵来支持2D游戏开发,我用这个很多 ...

  7. 格而知之8:我所理解的Runtime(3)

    关联对象 14.使用Category对类进行拓展的时候,只能添加方法,而不适合添加属性(可以添加属性,也可以正常使用get方法和set方法,只是不会自动生成以下划线开头命名的成员变量). 可以通过关联 ...

  8. 449A - Jzzhu and Chocolate 贪心

    一道贪心题,尽量横着切或竖着切,实在不行在交叉切 #include<iostream> #include<stdio.h> using namespace std; int m ...

  9. linux网络编程--跳水send和recv

    要了解一个概念:所有的TCP socket在内核具有发送缓冲器和接收缓冲器.TCP除了全双工操作模式TCP滑模取决于这两个单独buffer和这个buffer填充状态. 接收缓冲器数据缓存入内核.应用进 ...

  10. 使用nodeitk进行角点检測

    前言 东莞,晴,33至27度.今天天气真好,学生陆续离开学校.忙完学生答辩事情,最终能够更新一下nodeitk.本文继续介绍node的特征识别相关内容,你会看到,採用nodeitk实现角点检測是一件十 ...