본문 바로가기

728x90
반응형

분류 전체보기

(224)
tcp/ip -08 DNS DNS (domain name system) 서버 마다 할당 된 ip 주소를 매번 외우는 것이 쉽지 않기 때문에, domain name이라는 사람들이 기억하기 쉬운 이름을 ip 주소에 할당한다. 바로 이 domain name과 ip주소 사이에서의 변환을 수행하는 프로그램이 DNS이다. 도메인 이름은 해당 서버에 부여된 가상의 주소이므로 실주소로 변환 후 해당 서버에 접속이 가능하다. * 인터넷 브라우저에 domain name을 입력하면 일어나는 일 1. 인터넷 브라우저에서 DNS 서버에 접속한다. -> 해당 domain name에 대한 IP정보를 얻어온다. -> 얻어온 실주소를 통해 해당 서버에 접속한다. 네트워크를 거대한 인터넷 망에 연결하도록 돕는 것이 gateway * 데이터를 전송한다고 하면 그 ..
tcp/ip - 07 소켓의 종료 tcp 프로토콜에서는 소켓의 종료과정이 명확하게 이루어져야 한다. 그렇지 않으면 양방향 통신을 하고 있는 두 호스트 사이에서 데이터의 손실등의 문제가 발생할 수 있다. 리눅스의 close함수는 소켓의 완전 종료를 의미하는데, 이렇게 되면 데이터 송수신이 다 완료되지 않았는데 소켓이 먼저 닫혀버리는 상황이 발생 할 수 있다. -> 데이터 소멸 위험 따라서 이를 해결하기 위해서는 half-close, 즉 한 방향의 스트림만을 종료시키는 과정이 필요하다. *Stream? 소켓을 통해 두 호스트가 연결되면 그 다음부터는 상호간의 데이터 송수신이 가능한 상태가 됨 -> 스트림이 형성된 상태 연결 종료 시에 위 그림처럼 생성된 입출력 스트림 중 하나만 연결을 끊는 것을 half-close라고 한다. Half-clo..
golang udp example chapter 6에서 upd 서버와 클라이언트 프로그램에 대해 공부했으니, 코드를 예시로 작성해봤다. 먼저 server.go package main import ( "fmt" "log" "net" ) func handleUDPConnection(conn *net.UDPConn) { buffer := make([]byte, 1024) // udp connection으로 부터 값을 읽어들인다. n, addr, err := conn.ReadFromUDP(buffer) if err != nil { log.Fatal(err) } // 리턴 값은 전달 받은 클라이언트 서버의 address, msg fmt.Println("UDP client : ", addr) fmt.Println("Received from UDP ..
tcp/ip - 06 / UDP tcp와는 다른 성격을 가진 전송계층 프로토콜인 udp 신뢰성을 보장하지 않는 대신 빠른 전송을 보장한다는 특징이 있다. 흐름제어를 하지 않기 때문에 빠른 전송이 가능하다. udp 소켓은 seq, ack 와 같은 메시지 전달을 하지 않고, 연결의 설정과 해제의 과정도 존재하지 않기 때문에 빠른 전송이 가능한 것이다. 데이터를 보내고 나서 확인 과정이 존재하지 않기 때문에 데이터의 분실, 혹은 손실 위험이 존재한다. 때문에 안정성 보다 성능이 중요시 될 때 udp를 사용한다. 블로그를 쓰다보니 티켓팅하는 서버들은 udp를 쓸거 같다는 생각이 드네.. udp 소켓은 연결의 개념이 존재하지 않기 때문에, 서버 - 클라이언트 소켓의 구분이 없다. -> 따라서 1:1 연결이 아니라 하나의 소켓으로 여러 소켓과 데..
tcp/ip 05 tcp의 이론적인 내용을 총 정리하고 넘어가는 강. tcp의 내부 동작 원리가 어떻게 이루어지는지 정리해보고자 한다. 먼저 세 단계로 나누어서 설명해볼 수 있다. 1. 상대 소켓과의 연결 2. 상대 소켓과의 데이터 송수신 3. 상대 소켓과의 연결 종료 세 단계를 거쳐 tcp 의 내부 동작을 이해할 수 있다. tcp는 기본적으로 데이터 손실 없이 신뢰성을 보장하는 연결을 지향한다. 그렇기 때문에 양쪽 호스트 상호간의 확인 작업이 필수적으로 이루어진다. 1. 연결 1. host A에서 연결 요청을 전송 2. host B에서 연결 준비가 되었음을 응답 3. host A에서 연결 준비 데이터 수신 완료를 확인 이 세 과정을 거치기 때문에 3way handshaking이라고 부른다. 2. 데이터 송수신 1. 데이..
tcp/ip 04 tcp/ip 프로토콜 스택: 데이터의 송수신 과정을 네 개의 영역으로 계층화. 상위 ------------------------------------------- 하위 application
tcp/ip -02,03 챕터를 두개 같이 포스팅하겠다. 이유는 귀찮기 때문에 ㅎ chapter2. 소켓의 타입과 프로토콜 설정 protocol 이란? -> 대화에 필요한 통신규약, 즉 네트워크 통신에 필요한 규약. 소켓 통신에서는 주로 ipv4 프로토콜 체계가 사용되고 있다. 소켓의 타입에 따라 데이터 전송 방식이 달라진다. 1. 연결지향형 소켓 (SOCK_STREAM) / TCP - 중간에 데이터가 소멸되지 않고 목적지로 전송된다. - 전송순서대로 데이터가 수신된다. - 전송되는 데이터의 경계(Boundary)가 존재하지 않는다. / 데이터를 송수신하는 소켓은 내부적으로 buffer, 즉 바이트 배열을 지니고 있다. 떄문에 데이터가 수신되었다고 해서 바로 read 함수를 호출해야 하는 것은 아니다. - 데이터의 확인 절차가 ..
tcp/ip - 01 윤성우의 열혈 tcp/ip 소켓프로그래밍을 보며 공부하고 쓰는 블로그 참고로 이 책은 술먹고 쿠팡에서 산건데 여튼 술에 취한내가 저지른 일을 감당하고자 블로깅까지 해본다. 누구 보라고 쓰는건 아니고 나중에 까먹지 말자고 정리 차원에서 쓰는 블로깅이 될 것같다. 이 책의 가장 처음에서는 소켓이 무엇인지, 서버-클라이언트 소켓 통신이 무엇인지 설명하고있다. 그리고 c언어 코드로 구현되고 있는데, 나는 이걸 최대한 golang으로 바꿔서 작성하는식으로 공부해보고자 한다. 먼저 용어 정리 - socket : 서로 멀리 떨어져 있는 host간에 데이터를 주고 받을 수 있도록 네트워크 망에 연결시키는 창구 운영체제에서 제공을 하고 있다. 이 책에서는 socket 통신을 전화기의 작동 원리에 빗대어 표현하고 있다. ..
Golang Apple Login (애플 로그인) 전 포스팅에서 열심히 jwt, jwk 에 대해 설명했으니 이제 코드로 직접 구현하는 법을 작성하겠다. 글쓴이가 아주아주 귀찮은 관계로 서버가 로그인하여 애플 인증서버로 부터 - state - code - id_token 값을 이미 받았다는 전제하에 포스팅을 할 예정이다. 이전 단계는 다른 oauth2.0 로그인 방식과 똑같기 때문에 생략. type authResponse struct { State string `query:"state"` Code string `query:"code"` IdToken string `query:"id_token"` } reqAuth := authResponse{} if err = c.Bind(&reqAuth); err != nil { if uri := c.Request()...
Apple 로그인 JWT, JWK 애플로그인 구현을 위해서 꼭 알아야하는 jwt 굳이 애플로그인이 아니어도 필요하기 때문에 먼저 개념을 정리하고 apple 로그인 구현까지 포스팅해보려 한다. JWT (JSON Web Token) - jwt는 header, playload, signature 3 부분으로 이루어져있다. - 이를 base64 encoding 한 후 concat, 즉 문자열을 합친 것이 jwt이다. - 토큰에 포함된 내용들은 암호화 되어있지 않기 때문에 누구나 확인 가능하다. - signature를 이용하여 해당 토큰이 실제로 원래 발급자가 발급했던 유효한 토큰인지 검증 할 수 있다. - signature 생성을 위한 알고리즘은 발급시에 선택가능하다 (RS256, ES256, HS256 등) https://jwt.io JWT...

728x90
반응형