wanna be dev 🧑‍💻

Cool 하고 Sick한 개발자가 되고 싶은 uzun입니다

A.K.A. Kick-snare, hyjhyj0901, h_uz99 solvedac-logo

전체 글 175

📡 [Network] TCP 혼잡 제어 알아보기 [2] (ECN 명시적 혼잡 알림 Explicit Congestion Notification, 지연 기반 혼잡 제어 Delay-based Congestion Control)

본 포스팅은 을 참고하여 작성되었습니다. TCP congestion control 혼잡제어 명시적 혼잡 알림 Explicit Congestion Notification (ECN) 명시적 혼잡 알림 ECN은 인터넷 내에서 수행되는 네트워크 지원 혼잡 제어의 한 형태이다. TCP와 IP 모두 관여하는데 네트워크 계층에서 IP 데이터그램의 헤더 중 TOS(Type-of-service) 서비스 유형 필드에 있는 2개 비트의 공간이 ECN에 사용된다. ECN 비트의 한 비트는 라우터가 정체를 겪고 있음을 나타내기 위해 사용되게 된다. 손실이 발생하기 전에 혼잡 시작을 송신자에게 알리는 비..

📡 [Network] TCP 혼잡 제어 알아보기 [1] (Slow start 느린 출발, Congestion Avoidance 혼잡회피, Fast Recovery 빠른 회복, Reno, Tahoe, CUBIC)

본 포스팅은 을 참고하여 작성되었습니다. TCP congestion control 혼잡제어 TCP 혼잡 제어에 대한 3가지 질문 혼잡제어에 대한 세가지 의문점이 있다. 이에 대한 답을 알아보자. 1. TCP sender는 어떻게 트래픽 전송률을 제한하는가? congestion window (cwnd) 를 가진다. (rwnd와 유사) LastByteSent - LastByteAcked ≤ min(cwnd,rwnd) 2. TCP sender는 자신과 receiver 사이 경로의 혼잡을 어떻게 감지하는가? 정상적인 상태가 아니라면 timeout 또는 3dupack (3연중복ACK)가 ..

[BOJ][Gold IV] 뱀 - 3190번 (C++)

[Gold IV] 뱀 - 3190 문제 링크 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 분류 자료 구조(data_structures), 덱(deque), 구현(implementation), 큐(queue), 시뮬레이션(simulation) 문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드..

Problem Solving/BOJ 2022.10.25

📡 [Network] 전송층의 프로토콜 TCP 자세하게 알아보기 (세그먼트 헤더 구조, 순서 번호 Seq와 확인 응답 ACK, Retransmisson, Flow control, 3-way handshake 등)

본 포스팅은 을 참고하여 작성되었습니다. 5. Connection-oriented transport: TCP 이제까지 신뢰적인 데이터의 전송 원칙을 다루었다면 TCP에 대해 알아본다. TCP에서 신뢰적인 데이터의 전송을 위해 오류 검출, 재전송, 확인응답, 타이머, 순서 번호와 확인응답 번호를 위한 헤더필드 등등을 살펴보도록 하자. TCP 둘러보기 : 개요 TCP의 여러 특징을 간략하게 정리해보자. TCP는… 1. point-to-point 점대점 프로토콜이다. 하나의 전송자와 하나의 수신자 소켓 대 소켓의 통신 멀티 캐스팅을 지원하지 않는다 2. 순서를 보장하는 byte str..

📡 [Network] 전송층의 신뢰성있는 데이터의 전송 : 파이프라이닝 (GBN Go-back-N, SR Selective Repeat)

본 포스팅은 을 참고하여 작성되었습니다. 신뢰성있는 데이터의 전송 : 파이프라이닝 파이프라이닝 : GBN (Go-Back-N) 방법 송신자의 경우 초록 : 보내고 응답받음 노랑 : 보내고 응답받지못함 파랑 : 보낼 수 있지만 보내지 않음 하양 : 아직 위에서 데이터를 받아오지 못함 전송자는 window 라는 개념을 이용하여 N개 까지 패킷을 보낸다. (노랑 + 파랑) window 란 ACK를 받지 않았더라도 보낼 수 있는 최대 패킷 수이다. 앞 쪽 패킷이 ACK를 받으면 슬라이딩 된다. 이 window와 그 동작은 2개의 상태로 관리 할 수 있다. send_base : ACK 되..

📡 [Network] 전송층에서 신뢰성있는 데이터의 전송 (가상의 프로토콜 구축해보기)

본 포스팅은 을 참고하여 작성되었습니다. Ch03 Transport Layer 4. Principles of reliable data transfer : 신뢰성있는 데이터 전송 신뢰성 있는 데이터의 전송을 구현하는 문제는 전송층 뿐만 아니라 링크 계층에서도 발생할 수 있는 문제이다. 이는 네트워킹에서 매우 중요하다. 상위 계층 객체에게 데이터에게 제공되는 서비스의 추상화는 데이터가 전송될 수 있는 신뢰적인 채널의 서비스 추상화이다. 신뢰적인 채널에서는 데이터가 손상되거나 손실되지 않는다. 신뢰적인 데이터 전송 프로토콜은 이러한 서비스 추상화를 구현해야한다. 신뢰성 있는 데이터의 ..

📡 [Network] 전송층에서의 UDP 통신 (Connectionless transport)

본 포스팅은 을 참고하여 작성되었습니다. Ch03 Transport Layer 3. 연결없는 전송 UDP : Connectionless transport: UDP UDP : User Datagram Protocol UDP는 군더더기 없고 기본 핵심만 있는 프로토콜이다. 최선을 다하지만 데이터의 손상, 손실의 가능성 존재를 보장하지 않는다 비연결성 (connectionless) UDP 전송자, 수신자 끼리 핸드셰이킹이 없음 각 UDP 세그먼트는 각각 독립적으로 다뤄진다 왜 UDP인가? 연결을 맺지않음으로 RTT 지연이 존재하지 않는다 (빠르다) 전송자, 수신자 간의 연결 상태가 없..

📡 [Network] 전송층 - 다중화와 역다중화 (Multiplexing & Demultiplexing)

본 포스팅은 을 참고하여 작성되었습니다. Ch03 Transport Layer 2. 다중화와 역다중화 : Multiplexing & demultiplexing 서버가 클라이언트에 메세지를 보낼 때 transport, network 헤더를 추가하여 보낸다 그렇다면 여러 클라이언트가 서버에 데이터를 보내면 어떻게 구별할 수 있을까? ➡️ 전송층 헤더에 포함된 포트 번호로 구별! 다중화 & 역다중화 역다중화 (demultiplexing) 전송층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업 다중화 (multiplexing) 출발지 호스트에서 소켓으로부터 데이터를 모음 이에 대한 세..

📡 [Network] 전송층(Transport Layer)에 대해서 (개요)

본 포스팅은 을 참고하여 작성되었습니다. Ch03 Transport Layer 1. 전송층 서비스 : Transport-layer services 전송층 (transport layer)은 각기 다른 호스트에서 동작하는 어플리케이션 프로세스간의 논리적 통신을 제공한다. 논리적 통신은 어플리케이션의 관점에서 보면 프로세스들이 동작하는 호스트들이 직접 연결된 것처럼 보이게 된다. 실제로 호스트는 수많은 라우터와 링크를 통해 연결되어 지구상의 다른 지역에 있을 수 있다. 전송층 vs 네트워크층: 서비스와 프로토콜 네트워크층과 전송층을 비교해보자. 네트워크층 : 호스트 간의 논리적 소통 ..

간단한 클라이언트-서버 소켓 채팅 💬 프로그램 만들어보기 (with 파이썬🐍)

학교 과제로 간단한 소켓 통신 채팅 프로그램 만들기가 나왔는데 한김에 포스팅하도록 하겠다. 파이썬으로 초간단 소켓 채팅 프로그램 구현 1. 과제 목표 소켓을 사용하여 서버-클라이언트 간 채팅 프로그램 제작 파이썬을 이용하여 서버와 클라이언트를 구현 TCP로 통신하여 연결이 유지 되도록 함 2. 클라이언트 구현 코드 from socket import * print('--- Socket TCP communication client ---') serverName = '127.0.0.1' serverPort = int(input('enter the server port number : ')) clientSocket = socket(AF_INET, SOCK_STREAM) clientSocket.connect((s..

728x90