general
TCP Fast Open
TCP Fast Open TCP Fast Open (RFC 7413) TCP의 연결 시작 속도를 높이는 TCP 연결의 확장 초기 연결시 클라이언트는 서버로부터 받은 TFO 라는 암호화 쿠키를 저장함 이후 클라이언트가 연결될 때 SYN 패킷과 TFO 쿠키를 보내면, 서버는 3-Way handshake가 일어나기 전에 클라이언트로 데이터를 보낼 수 있음 데이터 전송 시 대기 시간을 감소시키는 효과 발생 메시지 인증 코드 값을 사용해 서드 파티가 IP 주소를 위조해서 스푸핑을 하기 힘들게 만듦 References https://en.wikipedia.org/wiki/TCP_Fast_Open http://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/37517.pdf
read moregeneral
DNS Resolver
DNS Resolver DNS Resolver DNS 서버에 대한 클라이언트를 의미하며, DNS 서버에 조회 메시지를 전송하고 응답 메시지를 받아 브라우저에게 제공 stub resolver와 recursive resolver가 존재 stub resolver 단말에서 동작하는 resolver name server 들에 대한 정보가 아닌 recursive dns server에 대한 정보만 가지고 있음 DNS 메시지를 생성해 recursive resolver에 요청을 보냄 IP 주소 정보를 캐싱함 리눅스에서는 /etc/resolv.conf에서 설정함 recursive resolver recursive dns server에서 동작하는 resolver 실제 name server들에 접근해서 IP 주소를 얻음 이런 복잡한 로직을 단말에 넣기에는 부담이 크기 때문에, stub resolver와 분리된 것 Cloudflare의 1.
read moregeneral
MAC Address ARP
MAC Address ARP MAC Address 인터넷이 가능한 기기에 모두 할당되어 있는 고유의 물리적인 주소 고정되어 있으며, 특별한 조작 없이는 달라지지 않음 (랜카드를 교체시에는 변경됨) IP Address와 MAC Address의 관계 IP 주소는 MAC 주소와 달리 고정되어 있지 않고 접속할 때 마다 달라질 수 있음 어떤 IP 주소로 패킷을 보낸다면, 실제로는 IP 주소에 해당하는 MAC 주소를 가진 기기로 패킷을 보내는 것 그렇다고 IP 주소 없이 MAC 주소만으로는 통신이 불가능한데, MAC 주소로는 라우팅을 할 수 없기 때문 모든 MAC 주소에 대한 정보를 가지고 있어야 라우팅 해줄 수 있는데, 이는 불가능 IP 주소를 이용해야만 라우팅 가능 ARP IP 주소와 MAC 주소를 매칭해 주는 프로토콜 각 단말을 ARP 테이블을 이용해 MAC 주소를 보냄 같은 네트워크 상의 단말 A에서 단말 B로 패킷을 보내는 경우 다음과 같이 동작함 A는 B의 MAC 주소를 알기 위해 ARP 요청을 broadcast 함 B는 ARP 요청을 받아 ARP 응답을 전송.
read moregeneral
DHCP
DHCP DHCP Dynamic Host Configuration Protocol의 약자 IP 주소를 비롯한 여러 정보를 DHCP 서버가 클라이언트에 자동으로 할당해주는 프로토콜 서브넷 마스크, 게이트웨이, DNS 서버 IP 주소, IP 주소 임대 기간 등 일반 가정 및 사무실에서 많이 사용됨 UDP를 사용해 통신함 DHCP는 별도의 보안 매커니즘이 존재하지 않기 때문에, 다음과 같은 공격에 취약 DHCP 서버를 위장해서 대신 응답 인가받지 않은 사용자가 DHCP 서버에 요청을 보내 정보를 훔침 DHCP 서버에 요청을 많이 보내서 IP 주소를 고갈시킴 동작 방식 다음과 같이 4단계의 요청과 응답으로 구성됨
read moregeneral
UDP Hole Punching
UDP Hole Punching UDP Hole Punching NAT를 통해 IP 패킷은 주소가 변하고, 내부에서 보는 private IP와 외부에서 보는 public IP가 다름 NAT 때문에 서로 다른 private network 내의 host 간의 P2P 연결에는 어려움이 따름 자신의 public IP 주소 및 Port를 다른 private network 내의 host 에게 알려주기 어렵기 때문 이를 해결하기 위해 중개 서버를 둘 수 있음 각 host가 중개 서버에 메시지를 보냄 NAT는 각 host의 private IP 주소 및 Port를 public IP 주소 및 Port로 변환해서 중계 서버에 전송 중개 서버는 각 host에게 상대방 host의 public IP 주소 및 Port를 보내주면 됨 각 host는 이제 서로의 public IP를 알기 때문에, 서로 P2P 통신 가능 서버에 데이터를 보내지 않고 전송 가능 NAT의 private IP와 public IP간 매핑은 오랫동안 연결이 없으면 삭제되므로, 이 방법은 영구적이지 않음 References https://cjwoov.
read moregeneral
CRC
CRC CRC 네트워크를 통해 데이터를 전송하면 손실, 순서 바뀜 등의 이유로 송신 데이터와 수신 데이터의 차이가 존재 가능 이를 확인하기 위해 체크를 위한 별도의 값을 사용. 이 체크값은 여러 방식으로 계산 가능한 데 그 중 하나가 CRC 이진법 기반의 하드웨어에서, 직렬 데이터를 다룰 때 구현이 쉬움 하드웨어뿐만이 아니라 소프트웨어에서도 검사 가능 네트워크의 하위 계층에서는 HW를 이용하고, 상위 계층에서는 SW를 이용해 계산 일반적인 사칙연산의 나눗셈이 아닌 commutative ring 상에서의 나눗셈으로, 계산에서 XOR 연산을 사용함 CRC를 n 비트로 만드는 것을 CRC-n이라고 함 대표적으로 사용되는 CRC의 n값은 8, 10, 16, 32 등 나눗셈에는 n + 1 비트의 나누는 수가 필요하고, 각 n마다 정해져 있음 대표적으로 CRC-8은 나누는 수가 100000111임 CRC 동작 방식 기존 데이터의 뒤에 n개의 0을 붙임 0을 붙인 데이터를 CRC-n의 나누는 수를 통해 나누고 나머지를 계산.
read moregeneral
Socket File Descriptor
Socket File Descriptor 이전 포스트 Network Socket Socket File Descriptor 파일 디스크립터란 OS가 파일에 할당해준 정수 값을 의미, 이 값을 이용해 파일에 접근 가능 파일 말고도 소켓 등에도 할당되고, 이 때 socket descriptor라고도 함 Socket descriptor는 socket system call에서 인자로 활용하거나 반환값이 됨 socket() 시스템 콜은 생성된 소켓의 socket descriptor를 반환 accept() 시스템 콜은 연결된 소켓의 socekt descriptor를 반환 References https://velog.io/@minji/%EC%86%8C%EC%BC%93-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%8C%EC%9D%BC-%EB%94%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%84%B0 https://velog.io/@minji/%EC%86%8C%EC%BC%93%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-IP-%EC%A3%BC%EC%86%8C%EC%99%80-Port-%EB%B2%88%ED%98%B8-%ED%95%A0%EB%8B%B9 https://dsit.tistory.com/2 기타 2022-08-22에 작성된 Socket 문서의 일부를 정리하고 보완
read moregeneral
Network Socket
Network Socket Network Host & Port 네트워크에 연결된 장치를 네트워크 노드, 그 중에서도 IP 주소가 있는 노드를 호스트라고 함 호스트 내의 프로세스들은 데이터를 주고 받으면서 통신함 Port 혹은 port number란 프로세스를 식별하기 위해 호스트에서 프로세스에 할당해주는 정수 값 Socket Socket이란 네트워크를 통해 데이터를 송수신하는 프로세스간의 종단점 역할을 하는 소프트웨어 (인터페이스) 데이터를 보내는 프로세스와 받는 프로세스 모두 socket을 열어서 데이터를 주고 받음 Socket의 주소는 호스트의 IP 주소, port number, Protocol 세 가지 정보로 구성됨 그러나 소켓의 주소 하나당 한 개의 socket만 열 수 있는 것은 아님 서버의 경우 하나의 소켓 주소에 해당하는 여러 socket을 열 수 있음 많은 사용자가 하나의 서버에 동시 접속이 가능한 이유 Socket System Call Socket은 다음과 같은 system call을 제공
read moregeneral
SSL Certificate
SSL Certificate SSL 인증서 클라이언트 - 서버간 통신을 할 때 암호화된 연결을 설정할 수 있게 해 주는 객체 인증 기관 (Certificate Authority)에서 발급 SSL로 통신을 시작할 때 서버는 SSL 인증서를 클라이언트에 보냄 클라이언트는 SSL 인증서가 유효한지 확인 2020년 9월 이후 SSL 인증서의 최장 유효 기간은 13개월 포함된 정보 도메인 이름, 인증 기관, 인증 기관의 디지털 서명, 발급 및 만료 날짜, 도메인의 공개키 인증서의 종류 인증서 심사의 수준에 따라 DV, OV, EV 존재
read moregeneral
SSL TLS
SSL TLS SSL 웹 서버와 클라이언트가 통신할 때 사용하는 암호화 프로토콜. HTTPS가 사용 엄밀히 말하면 SSL은 3.0 이후로 금지되었으며, 현재는 이를 계승한 TLS라는 보안 프로토콜을 사용 중 그러나 통신 보안 프로토콜을 SSL이라 총칭함 데이터가 암호화되어 패킷을 탈취당해도 비교적 안전 동작 수순 클라이언트가 서버에 요청을 보냄 서버는 클라이언트에 인증서와 공개키를 전송 클라이언트(브라우저)는 서버의 인증서를 확인함 클라이언트가 통신에 필요한 session key를 포함한 비밀 값을 만들고 서버의 공개키로 암호화한 후 전송 서버는 비밀키로 session key를 포함한 비밀 값을 복호화한 뒤 session key를 획득 session key를 서버와 클라이언트가 모두 가지고 있으므로 이를 이용해 대칭키 암호화 방식으로 서버와 클라이언트가 통신 연결이 끊기면 session key를 폐기 References https://blog.
read more