如何才能算得上熟悉TCP/IP编程?(转知乎)

1、

作者:匿名用户
链接:https://www.zhihu.com/question/20795067/answer/16259037

能进行网络编程

1.如果你说你会select,epoll,iocp模型,那会让对方觉得更靠谱
2.如果你说出你做过im,下载之类那会让对方来兴趣.
3.如果你说设计了通讯协议,会让对方觉得更贴切
4.如果你说做过,熟悉, ftp http snmp smtp 这些简单的老古董协议,会加分,但不大.
5.如果你说熟悉bt,emule,udt等协议,那会对你很有好感.
6.如果你说你破解过某大牌 qq,360内某通讯协议,那会对你加分很大.

我对熟悉的定义是:闭着眼能想起原理和实现,能和其他人侃侃而谈,能在搜索的帮助下,不慢的整出来.

精通的定义是:观点一针见血,实现一挥而就.

2、

作者:灵剑
链接:https://www.zhihu.com/question/20795067/answer/113142971

大部分提这个的到最后都用不上socket编程,毕竟现在是WebService的时代,大部分时候都可以把对外提供服务的协议限定在HTTP、WebSocket和JSON-RPC三种协议上。这就看你对岗位的了解了。
而且熟悉协议和熟悉编程本质上来说是两个要求啊……熟悉协议是指底层(三层及以下)数据包交换的规则,而熟悉socket编程,指的是熟悉socket, bind, listen, accept, recv, send等一系列接口,这个可要比熟悉协议简单多了。至于真的称得上熟悉协议的我觉得没多少,我做网络相关也不会指望招人的时候能来个熟悉TCP协议的,比如说窗长为什么最多是2^30字节,窗长和带宽、延迟各自是什么关系,TCP有哪些选项,TCP选项如何协商,为什么初始的seq序号需要在不同五元组上独立生成,TCP协商的MSS与实际发送的包长和payload大小是什么关系等等,说实话真的有点难,TCP作为一个有状态的协议是非常难懂的。RFC都修了好多个版本了。
熟悉socket编程相对来说就简单多了,主要要点在于理解TCP是个流(所以真心不要再问为什么会“粘包”了),是可靠传输,有缓冲区限制,然后理解一下每个接口的作用和使用方法就行了。然后了解下如何使用多线程和epoll/select同时处理多个socket,tcpserver的一般性的编写方法等等,足够了。

原文地址:https://www.cnblogs.com/y4247464/p/12264677.html

时间: 2024-10-02 20:21:46

如何才能算得上熟悉TCP/IP编程?(转知乎)的相关文章

二:熟悉 TCP/IP 协议

一篇文章带你熟悉 TCP/IP 协议(网络协议篇二) 同样的,本文篇幅也比较长,先来一张思维导图,带大家过一遍. 一图看完本文 一. 计算机网络体系结构分层 计算机网络体系结构分层计算机网络体系结构分层不难看出,TCP/IP 与 OSI 在分层模块上稍有区别.OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”. 二. TCP/IP 基础 1. TCP/IP 的具体含义 从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和

理解socket与tcp/ip编程相关函数

Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程,必须理解Socket接口. Socket接口设计者最先是将接口放在Unix操作系统里面的.如果了解Unix系统的输入和输出的话,就很容易了解Socket了.网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的S

<浅出> 熟悉TCP/IP协

前言 由于非CS科班出身,没有系统学过操作系统或微机原理,所以对计算机底层一直不是特别明白,所以在用到java网络编程的时候就头大,虽然知道socket怎么用,能搭建个B/S联通起来,但是socket到底是什么还是一概莫知.这篇随笔就当是让自己多了解一点这方面的知识吧. OSI七层模型 首先,做一件事情最重要的是知道目的(why).那么我们的目的就是让两台主机相互通信,只有让两台能通信,才能形成现在的互联网. 其次,做一件事情要知道怎么做(how).想象一下两边放着两台电脑,让它们通信(也就是数

c# TCP/IP编程

这东西很多朋友都有写过了,我也就写着玩玩,就当做个笔记吧.不废话了. TCP/IP在数据通信中被广泛的使用,自然得包含客户端和服务端,当然,自己自言自语不是什么不可以,可那样貌似有点神经. 好了,那就先来建立服务端吧. 1.新建一个项目,就取名叫MyServer吧,然后敲入如下代码: using System;using System.Net;using System.Net.Sockets; namespace MyServer{    class Program    {        st

TCP/IP,必知必会的

文章目录 前言 TCP/IP模型 数据链路层 网络层 ping Traceroute TCP/UDP DNS TCP连接的建立与终止 TCP流量控制 TCP拥塞控制 0 前言 本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养. 1 TCP/IP模型 TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议. 基于TCP

TCP/IP编程 - 1) 基础知识

1. What Is a Socket?(什么是套接字) A socket is an abstraction through which an application may send and receive data, in muchthe same way as an open-file handle allows an application to read and write data to stablestorage. 简单来说,套接字就是网络数据传输用的软件设备. 举个生活中的例子

TCP/IP编程学习01

网络编程就是编写使多台计算机联网交互数据.操作系统会提供名为socket(套接字)的部件,socket是网络数据传输的设备软件,所以说网络编程又可以成为socket编程. 在此借用书中打电话例子,对socket的使用做简单描述: 1)首先要有一个电话,新建电话就相当于创建一个电话socket. int socket(int domain, int type, int protocol); 2)给电话分配号码,绑定IP地址和端口号. int bind(int sockfd, struct sock

Linux下的TCP/IP编程----进程及多进程服务端

在之前的学习中我们的服务端同一时间只能为一个客户端提供服务,即使是将accept()函数包含在循环中,也只能是为多个客户端依次提供服务,并没有并发服务的能力,这显然是不合理的.通过多进程的使用,我们可以很便捷的实现服务端的多进程,这样就可以同时为多个客户端提供服务. 首先我们要理解程序,进程,进程ID,僵尸进程,线程的概念. 程序:广泛的说就是为了达到某一目的二规定的途径,在编程中具体的就是为了实现某一功能而编写的代码实体,是静态的. 进程:程序的一次动态执行就是一个进程,它是占用了一定内存空间

【python】TCP/IP编程

No1: [TCP] 客户端 import socket s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(('www.sina.com.cn',80)) s.send(b'GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection:close\r\n\r\n') buffer=[] while True: d=s.recv(1024) if d: buffer.append(