Network 19

[Network] 흐름 설명

- Socket은 커널 오브젝트이다.- Local / Remote의 IP 주소를 가진다. Server1. socket() system call로 소켓 생성2. bind() system call로 주소 및 포트설정3. listen() system call에 bind로 설정한 소켓과 backlog값 설정.1) listen()을 호출하게 되면 커널에서 SYN backlog, Accept backlog라는 2개의 queue를 생성한다(3 way handshake 준비).- backlog : backlog queue의 크기 설정2) Client로부터 SYN 요청이 들어오면 해당 소켓 정보를 SYN backlog queue에 저장한 후, SYN + ACK를 해당 Client에 보낸다.- Timeout 발생 시 재시..

Network 2018.09.30

[Network] TCP가 UDP보다 빠를 수도 있다...?

TCP는 PMTUD 기능으로 Fragmentation이 절대 일어나지 않는 최소 MTU를 가지는 경로를 탐색해, 최소 MSS 정보를 교환한다. 이 경우 최적의 보장된 경로를 마련해 놓고 통신하는 것이다. UDP는 이러한 과정이 없고 매번 경로를 탐색하기 때문에, 네트워크 경로 선택을 극혐으로 하는 경우가 많을 수 있는 환경이라면 UDP 극혐경로로 전송 + Fragmentation하는 시간 > TCP handshake, timeout, etc ... 시간 이 되는 경우라면 UDP가 더 느릴지도 몰라... 어디서 이 말을 들어서 하루종일 생각해 보았다.

Network/팁 2017.04.05

[UNP] Transport Layer에 대한 이야기

모든 것은 결국 Datagram 단위로 쪼개져 보내진다. TCP가 Stream 방식이지만, 이건 sequence number를 이용해 순서를 정해주는 방식이다. DSCP : 네트워크 트래픽에 서로 다른 수준의 서비스를 할당할 수 있도록 하는 IP 패킷의 한 필드 MTU(Maximum Transmission Unit) - 네트워크 Layer에서 Segment 없이 보낼 수 있는 최대 데이터그램 크기. 즉, 한 번에 보낼 수 있는 크기. - 하드웨어에 따라 값이 다르다. - 우리가 주로 사용하는 이더넷의 MTU 값은 1500이다. - MSS(Maximum Segment Size)는 MTU에 영향을 조금 받는다. MTU = MSS + IP Header + TCP HeaderMTU가 1500이라면, MSS = ..

[UNP] SCTP Association Establishment and Termination

SCTP는 Connection-Oriented(연결 기반) 통신이다. 그래서 SCTP 또한 Association establishment와 Termination에 대한 Handshake를 한다. Four-Way handshake시나리오는 TCP와 비슷하다. SCTP association이 establish되면 알 수 있다. 1. Server는 들어오는 Association을 받을 준비를 해야 한다. 이 준비는 일반적으로 socket, bind, listen을 사용하는 것으로 이루어 지고, 이것이 Passive Open 과정이다. 2. Client에서 connect를 호출하거나, 암묵적으로 association을 open하는 message를 보내면서 Active Open을 하게 된다.Client SCTP가..

[Unix Network Programming] TIME_WAIT State

MSL(Maximum Segment Lifetime) 만약 TCP 자체를 구현해야 한다면, MSL 값을 반드시 세팅해 주어야 한다. RFC1122 : 2분. Berkeley-derived version : 30초. MSL은 IP Datagram이 Network에 존재할 수 있는 최대시간이다. original url : https://ko.wikipedia.org/wiki/Time_to_live TTL(Time To Live) & 홉 리미트(hop limit)인터넷 프로토콜에서 TTL은 8비트 크기의 필드이다. IPv4 헤더에서 TTL은 20 옥텟 중 8번째 옥텟이며, IPv6 헤더에서는 40 옥텟 중 8번째 옥텟이다. TTL의 최댓값은 단일 옥텟의 최댓값에 해당하는 255이다. 권장되는 초기값은 64이다..

[Unix Network Programming] Chapter 2.6 TCP Connection Establishment and Termination

1. 서버는 들어오는 새 연결을 Accept할 준비를 한다. (socket, bind, listen 호출)2. connect를 호출하여 open한다. Client는 SYN(synchronize segment : 서버에게 보낼 data의 sequence number)를 보낸다. 일반적으로 SYN과 함께 전송되는 데이터는 없다. 그저 IP Header / TCP Header / 여러가지 TCP 옵션들에 대한 정보가 포함된다.3. 서버는 클라이언트의 SYN에 응답하여 ACK를 보낸다. 또한, 보낼 데이터의 sequence number를 포함한 SYN을 보낸다. ' 이걸 하나의 segment에 담아 보낸다. 4. 마지막으로, 클라이언트는 서버의 SYN에 응답하여 ACK를 보낸다. TCP Options MSS 이..

[Unix Network Programming] Chapter 2.5 SCTP(Stream Control Transmission Protocol)

SCTP는 TCP/UDP와 흡사하다. 클라이언트와 서버 간의 "Association"들을 제공한다. TCP처럼 reliablity / sequencing / flow control, full-duplex 통신을 제공한다. "Association"은 SCTP에서 "connection" 대신에 사용하는 용어이다. connection은 오직 2개의 IP주소끼리의 연결을 의미하기 때문이다. SCTP는 Multi Homing으로 인해 2개 이상의 IP 주소가 사용될 수 있다. TCP와 다르게 SCTP는 Message Oriented 방식이다. 그리고 UDP처럼, 송신 측에 의해 작성된 records의 길이가 수신 측에 전달된다. SCTP는 연결 endpoint들 사이에 Multiple Stream을 사용할 수 있..

[Network] Hole Punching(홀펀칭) 에 대해

공유기(NAT)의 'Mapping Table' 기능을 이용한 기법이다. S 서버가 켜져 있고, A 클라이언트가 R 공유기를 이용 중이라고 가정해 보자. A가 R을 통해 S에 접속하면, R(NAT)는 Mapping Table에 그 정보를 기록한다. 음.. 그러니까.. Local의 몇 번 Port와 몇 번 IP에서 S의 몇 번 Port와 IP에 접근했다!! ..를 기록한다. 이 정보가 없으면 만약 B 클라이언트에서 A의 외부IP, Port... 즉, 공유기에 접근한다면 공유기에 그 Mapping Table에 기록이 없어서 접근이 불가능하다. 하지만 서버에서는 이미 A에서 먼저 접근했으므로 그 기록이 있어 통신이 가능하다. 물론 서버는 그 전에 공유기 설정에서 포트포워딩으로 포트 제어를 해 두었으니 A에서 접..

Network/팁 2017.02.26

[UNP] 2.4 (TCP) Transmission Control Protocol

TCP - connection 기반으로 데이터를 교환한다. - Reliable - ACK가 오지 않으면 자동으로 데이터를 재전송하고, 기다린다. 보통 4~10분간(구현에 따라 다름) 몇 번의 데이터 재전송을 해도 응답이 없다면 포기한다. - 다른 endpoint로부터의 데이터를 receive할 거라는 보장을 하지 않는다. 그저 가능하다면 데이터를 전달하는 것이다. 데이터를 받을 수 없다면 그 정보를 알려 준다.- 그래서 TCP는 100% 신뢰성 있는 프로토콜을 보장하는 것이 아니다.- Round-Trip Time(RTT : ACK가 얼마나 오래 걸리는지에 대한 시간 => 패킷 주고받는 시간)을 추정하는 알고리즘을 사용한다. 만약 LAN을 통한 RTT는 밀리초 단위 시간이 걸린다면, WAN에서는 초 단위로..

[UNP] Chapter 2.3 (UDP) User Datagram Protocol

Encapsulated 라는 용어가 자주 나오는데, 그냥 캡슐화 라고 읽고.. 그것에 의해 묶여진다는 의미로 생각한다. UDP 소켓에 패킷을 적을 때, 패킷은 UDP 데이터그램에 의해 Encapsulated되고, IP 데이터그램에 의해 Encapsulated된다.. 고 써 있는 것을 보니, 레이어 별로 Encapsulated 되는 것을 말하는 것 같다. UDP - Described in RFC 768 - Connectionless - 에러를 발견하거나 패킷이 드랍되도 TCP처럼 자동으로 재전송되지 않는다. - UDP Datagram은 Length를 가진다. - TCP와 다르게 message boundary가 없다. - 같은 소켓으로 다양한 datagram 패킷 받을 수 있다.

반응형